生成 SimpleDateFormat 的简单方法

Easy way to generate SimpleDateFormat

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

“有什么方法可以测试或生成它而无需多次尝试和错误”是什么意思?

顺便说一句,我正在使用 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

尝试使用

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
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()));
    }
}

java.time 和 ThreeTenABP

What is the pattern when using SimpleDateFormat();?

我的建议是你不要使用 SimpleDateFormat。 class 是出了名的麻烦而且早已过时。在 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);

Mon Nov 11 09:36:53 CET 2019

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

Is there some way I can test or generate it without multiple try and error?

总是有 Java SimpleDateFormat 在线测试器。我在底部给你 link。我不知道 DateTimeFormatter 有类似的服务。许多模式都是相同的,也是我上面使用的那个,所以可能值得一试。

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

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

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置现代 API。
  • 在非 Android Java 6 和 7 中获取 ThreeTen Backport,现代 classes 的 backport(ThreeTen 用于 JSR 310;参见 link s 在底部)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。

链接