java 简单日期格式?

java SimpleDateFormat?

public static void main(String[] args) {
        Date now = new Date();

        String dateString = now.toString();
        System.out.println(" 1. " + dateString);

        SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

        try {
            Date parsed = format.parse(dateString);
            System.out.println(" 2. " + parsed.toString());
        } catch (ParseException pe) {
            System.out.println("ERROR: Cannot parse \"" + dateString + "\"");
        }

        System.out.println(" 3. " + format.format(now));
    }

在控制台打印:

 1. Thu Feb 23 17:14:51 CET 2017
ERROR: Cannot parse "Thu Feb 23 17:14:51 CET 2017"
 3. jeu. févr. 23 05:14:51 CET 2017

而不是:

 1. Thu Feb 23 17:14:51 CET 2017
 2. Thu Feb 23 17:14:51 CET 2017
 3. jeu. févr. 23 05:14:51 CET 2017

看起来你的默认 LocaleFRENCH,如果你不指定另一个 SimpleDateFormat 就使用它,你无法成功解析像 ThuFeb.

但是,您可以像这样指定 ENGLISH Locale 的用法:

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

你已经运行进入了Javaclass现在已经过时的众多疾病之一Java。

可靠且简单的解决方法是更改​​为 Java 8 日期和时间 classes。最符合Date的新class是Instant。有了这个 class 你的代码就变成了:

    Instant now = Instant.now();

    String dateString = now.toString();
    System.out.println(" 1. " + dateString);

    try {
        Instant parsed = Instant.parse(dateString);
        System.out.println(" 2. " + parsed.toString());
    } catch (DateTimeParseException e) {
        System.out.println("ERROR: Cannot parse \"" + dateString + "\"");
    }

我从你的示例中遗漏了 3.。当然,可以用任何你能想到的方式格式化 Instant,但如果我们只是想要与 toString 方法相同的输出,我现在觉得不值得。相反,我想表明,对于这种情况,您根本不需要格式。代码打印:

 1. 2017-02-23T17:07:19.775Z
 2. 2017-02-23T17:07:19.775Z

您注意到它以 UTC 格式打印时间。如果您想要本地时区,只需使用 ZonedDateTime 而不是 Instant。其余代码完全相同,但现在我的计算机上输出为:

 1. 2017-02-23T18:07:19.852+01:00[Europe/Berlin]
 2. 2017-02-23T18:07:19.852+01:00[Europe/Berlin]

当然,在新的 classes 中也可能会产生一个错误,就像您从不同意的语言环境中得到的那样。据我所知,您必须明确指定不同意的语言环境。所以你不容易做到。