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

时间:2011-12-20 09:27:22

标签: android string date casting

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

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;            

   }

7 个答案:

答案 0 :(得分:344)

从字符串到日期

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();  
}

答案 1 :(得分:9)

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = dateFormat.parse(datestring)

答案 2 :(得分: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
}

答案 3 :(得分:2)

     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();
         }
    }
    }
  

这是您的日期对象日期   输出是:

Wed Mar 14 13:30:00 UTC 2018

2018年3月14日

答案 4 :(得分:1)

谨慎使用c.getTime().toString();所依赖的区域设置是个好主意。

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

答案 5 :(得分: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);

答案 6 :(得分:0)

您现在可以在 Android 中使用 java.time,方法是使用 Android API Desugaring 或导入 ThreeTenAbp

启用 java.time 后,您可以用更少的代码和更少的错误执行相同的操作。

假设您正在传递一个包含以 ISO 标准格式的日期时间的 String,就像当前接受的答案一样。
那么以下方法及其在 main 中的用法可能会向您展示如何从 String 转换和转换为 public static void main(String[] args) { String dtStart = "2010-10-15T09:27:37Z"; ZonedDateTime odt = convert(dtStart); System.out.println(odt); }

public static void main(String[] args) {
    String dtStart = "2010-10-15T09:27:37Z";
    OffsetDateTime odt = convert(dtStart);
    System.out.println(odt);
}

2010-10-15T09:27:37Z

将打印该行

public static OffsetDateTime convert(String datetime) {
    return OffsetDateTime.parse(datetime);
}

当有相应的方法时

public static ZonedDateTime convert(String datetime) {
    return ZonedDateTime.parse(datetime);
}

LocalDateTime

但当然不在同一个类中,那不会编译...

还有一个 DateTimeFormatter,但它无法解析区域或偏移量。

如果您想使用自定义格式来解析或格式化输出,您可以使用 public static void main(String[] args) { String dtStart = "2010-10-15T09:27:37Z"; String converted = ZonedDateTime.parse(dtStart) .format(DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss zz uuuu", Locale.ENGLISH ) ); System.out.println(converted); } ,可能像这样:

Fri Oct 15 09:27:37 Z 2010

将输出

OffsetDateTime

对于 public static void main(String[] args) { String dtStart = "2010-10-15T09:27:37Z"; String converted = OffsetDateTime.parse(dtStart) .format(DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss xxx uuuu", Locale.ENGLISH ) ); System.out.println(converted); } ,您需要稍微调整一下模式:

Fri Oct 15 09:27:37 +00:00 2010

这将产生一个(稍微)不同的输出:

ZonedDateTime

那是因为 OffsetDateTime 考虑了偏移量不断变化的命名时区(由于夏令时或任何类似的原因),而 def RunSocket(): os.system('python "Display Lines.py"') threading.Thread(target = RunSocket).start() check_display_active = True try: while check_display_active == True: try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((display_host, display_port)) client.send(str('is_active').encode()) response = client.recv(4096) if response.decode() == "active": break time.sleep(0.5) except Exception as e: print("==========================================") print("Display not running") print(e) print("==========================================") except: sys.exit() 知道与 UTC 的偏移量。< /p>