【问题标题】:String Date + Time to Date Object Java字符串日期 + 时间到日期对象 Java
【发布时间】:2018-04-23 07:59:02
【问题描述】:

我正在尝试将string "8/2/2018 04:25 AM" 转换为date object,但当我执行date.toString() 时,它似乎转换错误,使其输出完全错误的datetime。注意 - 我不关心 date.toString() 格式,我只需要它是相同的日期和时间

这是我的代码,

String timestampString = dateText.getText().toString() + " " + timeText.getText().toString();
try {
     Date timestamp2 = new SimpleDateFormat("dd/MM/yyyy hh:mm a").parse(timestampString);
     Log.d("TIME", timestamp2.toString());

} catch (ParseException e) {Log.d("TAG", e)}

这是输出:

D/TIME: Wed Feb 07 23:25:00 EST 2018

如果有人能引导我走向正确的方向,不胜感激。

【问题讨论】:

  • 时区问题。将 SimpleDateFormat 或 Date 或两者都设置为要修复的正确时区。
  • 我该怎么做?
  • 发帖前先搜索。这已经解决了很多很多次了。并且永远不要使用DateSimpleDateFormat 类。只使用 java.time 类。
  • 您确定您正在查看正确的日志条目吗?我想知道您是否复制了日志条目并将其添加到此处而不更改它?因为冒号出现在末尾,而 d/ 出现在开头。

标签: java date time simpledateformat


【解决方案1】:
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/uuuu");
    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
    LocalDate date = LocalDate.parse(dateText.getText(), dateFormatter);
    LocalTime time = LocalTime.parse(timeText.getText(), timeFormatter);
    LocalDateTime dateTime = date.atTime(time);
    Log.d("TIME", dateTime.toString());

打印:

日期/时间:2018-02-08T04:25

我正在使用并推荐java.time,现代Java 日期和时间API。您使用的Date 类早已过时,SimpleDateFormat 也是出了名的麻烦。如果可以的话,避免那些。 java.time 使用起来更好。并提供没有时区的LocalXx 类,保证您免受时区问题的影响。也就是说,您可能希望将您的日期时间转换为您选择的时区中的 ZonedDateTime,以使其成为明确的时间点。

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备上(据我所知,从 API 级别 26 开始),现代 API 是内置的。
  • 在 Java 6 和 7 中,获取 ThreeTen Backport,即新类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2013-09-20
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多