2

我正在尝试将当前日期与输入日期进行比较,以这种格式接收到“EEE MMM dd HH:mm:ss zzz yyyy”

这段代码在我的输入字符串为时有效,Wed Apr 01 09:00:00 GMT 2020但在其Wed Apr 01 09:00:00 BST 2020.

        DateTime currentTime =DateTime.now().withZone(DateTimeZone.forID("Europe/London"));
        DateTimeFormatter fmt = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zzz yyyy");
        DateTime inputDateTime = fmt.parseDateTime("Wed Apr 01 09:00:00 BST 2020");


        if (inputDateTime.isBefore(currentTime))
            Log.d(TAG, "if ");
        else
            Log.d(TAG, "else ");

知道我在做什么错吗?另外,如果有更好的方法,请随时提出建议(不能使用新的 Java 日期和时间库,因为我们支持 android API 19+)

4

3 回答 3

2

如果您使用ThreeTen Android Backport而不是Joda-Time, 并且您应该使用它,那么它解析得很好:

import org.threeten.bp.ZonedDateTime;
import org.threeten.bp.format.DateTimeFormatter;
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
ZonedDateTime inputDateTime = ZonedDateTime.parse("Wed Apr 01 09:00:00 BST 2020", fmt);
System.out.println(inputDateTime);

输出

2020-04-01T09:00+01:00[Europe/Isle_of_Man]
于 2020-04-10T05:22:52.777 回答
1

Docs 提到Time zone names无法在 joda DateTimeFormat中解析,因为时区缩写不明确,解析器无法知道它到底是哪个时区

Zone names: Time zone names ('z') cannot be parsed.

例如

  • BST可以是British Summer TimeBangladesh Standard TimeBougainville Standard Time

  • PST可以是Pacific Standard TimePakistan Standard Time

  • CST可以是Central Standard Time(美国)China Standard Time、 或Cuba Standard Time
  • EST可以是Eastern Standard Time(美国)或Eastern Standard Time(澳大利亚)。

最好的方法是在这里BST用适当的iso时区代码替换(例如),然后简单地使用DateTimeFormatEurope/Isle_of_Man"EEE MMM dd HH:mm:ss ZZZ yyyy"

DateTimeFormatter fmt = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss ZZZ yyyy");
DateTime inputDateTime = fmt.parseDateTime("Wed Apr 01 09:00:00 Europe/Isle_of_Man 2020");

System.out.println(inputDateTime);  //2020-04-01T09:00:00.000+01:00
于 2020-04-10T03:07:56.447 回答
0

我不确定这是否符合您对 Andriod API 19+ 的要求,但这里有一些用于使用 SimpleDateFormatter 进行日期格式化的内容

    String pattern = "EEEEE MMMMM yyyy HH:mm:ss";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
    String date = simpleDateFormat.format(new Date());
    System.out.println(date);

希望这能解决您的问题!

于 2020-04-10T03:04:18.957 回答