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

新手上路,请多包涵

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

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

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

反正有没有直接将此字符串转换为日期对象?我想将此存储的时间与当前时间进行比较。


更新

谢谢大家。我使用了以下代码:

 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;

   }

原文由 Hesam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 974
2 个回答

从字符串到日期

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

原文由 user370305 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

假设您正在传递 String 包含以 ISO 标准格式化的日期时间,就像当前接受的答案一样。

然后以下方法及其在 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知道 与 UTC 的偏移量。

原文由 deHaar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题