Android,如何将字符串转换为日期?


142

每当用户启动应用程序时,我都会将当前时间存储在数据库中。

Calendar c = Calendar.getInstance();
    String str = c.getTime().toString();
    Log.i("Current time", str);

在数据库端,我将当前时间存储为字符串(如您在上面的代码中看到的)。因此,当我从数据库加载它时,需要将其强制转换为Date对象。我看到了一些所有人都使用“ DateFormat”的示例。但是我的格式与日期格式完全相同。因此,我认为没有必要使用“ DateFormat”。我对吗?

无论如何,有没有直接将此String转换为Date对象?我想将此存储时间与当前时间进行比较。

谢谢

======> 更新

谢谢亲爱的家伙们。我使用以下代码:

private boolean isPackageExpired(String date){
        boolean isExpired=false;
        Date expiredDate = stringToDate(date, "EEE MMM d HH:mm:ss zz yyyy");        
        if (new Date().after(expiredDate)) isExpired=true;

        return isExpired;
    }

    private Date stringToDate(String aDate,String aFormat) {

      if(aDate==null) return null;
      ParsePosition pos = new ParsePosition(0);
      SimpleDateFormat simpledateformat = new SimpleDateFormat(aFormat);
      Date stringDate = simpledateformat.parse(aDate, pos);
      return stringDate;            

   }

Answers:


419

从字符串到日期

String dtStart = "2010-10-15T09:27:37Z";  
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = format.parse(dtStart);  
    System.out.println(date);  
} catch (ParseException e) {
    e.printStackTrace();  
}

从日期到字符串

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = new Date();  
    String dateTime = dateFormat.format(date);
    System.out.println("Current Date Time : " + dateTime); 
} catch (ParseException e) {
    e.printStackTrace();  
}

确实如此-最好在日期字符串中应用某种标准格式,然后再将其存储在数据库中。在这种情况下,en.wikipedia.org
wiki / ISO_8601

对于“字符串到日期”的更严格的解决方案,添加“ format.setLenient(false);”很方便。在try ... catch块之前。这样,检查以前正确的字符串日期会更好。
亚历克斯(Alecs)2015年

我不认为这SimpleDateFormat.format()会引发例外
某处某人

2
如果您的SDK版本大于或等于棉花糖,则使用这样的方法 SimpleDateFormat dateFormat =new SimpleDateFormat(""yyyy-MM-dd'T'HH:mm:ss'Z'"", Locale.getDefault());
Dheeraj Jaiswal19年


6

通过使用SimpleDateFormat或DateFormat类

例如

try{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // here set the pattern as you date in string was containing like date/month/year
Date d = sdf.parse("20/12/2011");
}catch(ParseException ex){
    // handle parsing exception if date string was different from the pattern applying into the SimpleDateFormat contructor
}

4
     import java.text.ParseException;
     import java.text.SimpleDateFormat;
     import java.util.Date;
     public class MyClass 
     {
     public static void main(String args[]) 
     {
     SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");

     String dateInString = "Wed Mar 14 15:30:00 EET 2018";

     SimpleDateFormat formatterOut = new SimpleDateFormat("dd MMM yyyy");


     try {

        Date date = formatter.parse(dateInString);
        System.out.println(date);
        System.out.println(formatterOut.format(date));

         } catch (ParseException e) {
        e.printStackTrace();
         }
    }
    }

这是您的Date对象的日期 ,输出为:

2018年3月14日星期三13:30:00

2018年3月14日


非常感谢!
Maryoomi1

1

谨慎对待c.getTime().toString();依赖的语言环境可能是一个好主意。

一种想法是以秒为单位存储时间(例如UNIX time)。作为一个,int您可以轻松比较它,然后在向用户显示时将其转换为字符串。


1
String source = "24/10/17";

String[] sourceSplit= source.split("/");

int anno= Integer.parseInt(sourceSplit[2]);
int mese= Integer.parseInt(sourceSplit[1]);
int giorno= Integer.parseInt(sourceSplit[0]);

    GregorianCalendar calendar = new GregorianCalendar();
  calendar.set(anno,mese-1,giorno);
  Date   data1= calendar.getTime();
  SimpleDateFormat myFormat = new SimpleDateFormat("20yy-MM-dd");

    String   dayFormatted= myFormat.format(data1);

    System.out.println("data formattata,-->"+dayFormatted);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.