【问题标题】:Easy way to generate SimpleDateFormat生成 SimpleDateFormat 的简单方法
【发布时间】:2019-11-13 08:54:06
【问题描述】:

我有这个字符串“2019 年 11 月 11 日星期一 10:36:53 GMT+02:00”。使用 SimpleDateFormat(); 时的模式是什么?有什么方法可以测试或生成它而无需多次尝试和错误?

【问题讨论】:

  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。

标签: java android simpledateformat datetime-parsing


【解决方案1】:

java.time 和 ThreeTenABP

使用 SimpleDateFormat(); 时的模式是什么?

我的建议是不要使用SimpleDateFormat。这个类是出了名的麻烦和过时。在 Android 上——以及在你的 API 级别上——你可以使用 java.time,现代的 Java 日期和时间 API。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);

    String stringWereHaving = "Mon Nov 11 10:36:53 GMT+02:00 2019";
    ZonedDateTime dateTime = ZonedDateTime.parse(stringWereHaving, formatter);
    System.out.println(dateTime);

输出是:

2019-11-11T10:36:53+02:00[Etc/GMT-2]

这里唯一令人困惑的是,与正常用法相比,时区名称Etc/GMT-2 中使用的符号被故意颠倒了。

仅当您需要一个老式的 Date 对象用于尚未升级到 java.time 的旧版 API 时,才可以这样转换:

    Instant i = dateTime.toInstant();
    Date oldfashionedDate = DateTimeUtils.toDate(i);
    System.out.println(oldfashionedDate);

2019 年 11 月 11 日星期一 09:36:53 CET

输出来自我在欧洲/哥本哈根时区的计算机,因此与偏移量 `02:00 处的输入相比,一天中的时间调整了 1 小时。我们得到了与字符串中相同的时间点。

有没有什么方法可以测试或生成它而无需多次尝试和 错误?

总有 Java SimpleDateFormat Online Tester。我给你底部的链接。我不知道DateTimeFormatter 有类似的服务。许多模式都是相同的,也是我上面使用的模式,所以可能值得一试。

问题:java.time 不需要 Android API 26 级吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6

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

链接

【讨论】:

    【解决方案2】:

    尝试使用

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
    

    【讨论】:

    • 好的,谢谢!
    • @Dim,我的回答有问题吗?您在 3 个月后更改了接受的答案:(
    【解决方案3】:
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    public class Test{
        public static void main(String[] args) {
    
            //Try This
    
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss 'GMT' Z yyyy");
    
            System.out.println(simpleDateFormat.format(new Date()));
        }
    }
    

    【讨论】:

      【解决方案4】:

      你的意思是“有什么方法可以在没有多次尝试和错误的情况下测试或生成它?”

      顺便说一句,我正在使用DateFormat dateFormat = new SimpleDateFormat(<put your desired pattern here via STRING>);

      并获取当前日期:

       Date date = new Date();
       String result = dateFormat.format(date); // formatting the date and passing it on string.
      

      示例代码:

      DateFormat dateFormat = new SimpleDateFormat("MMM. dd, yyyy EEE HH:mm:ss");
      Date date = new Date();
      
      result = dateFormat.format(date);
      

      输出:2019 年 11 月 13 日星期三 17:02:00

      【讨论】:

        猜你喜欢
        • 2013-03-19
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2015-12-02
        • 2010-10-18
        • 2021-04-07
        相关资源
        最近更新 更多