如何从java.time.Instant正确使用DateTimeFormatter / convert

时间:2015-02-20 17:02:32

标签: java-8 jodatime jsp-tags java-time

好的,我需要一些帮助来了解如何使用java.time格式化程序。我一直在崩溃"不支持的字段"整天例外(双关语无意,抱歉)。

只是一些例子。

这是一个非常简单的基本FormatStyle格式:

import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class JavaTimeFormat {
    public static void main(String[] args) {
        Instant now = Instant.now();
        DateTimeFormatter formatter =
            DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
        System.out.println(formatter.format(now));
    }
}

我得到的只是一个例外:

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException:
Unsupported field: DayOfMonth

让我们尝试一个简单的模式。

import java.time.Instant;
import java.time.format.DateTimeFormatter;

public class JavaTimeFormat {
    public static void main(String[] args) {
        Instant now = Instant.now();
        DateTimeFormatter formatter =
            DateTimeFormatter.ofPattern("dd/MM/yyyy");
        System.out.println(formatter.format(now));
    }
}

同样的问题。

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException:
Unsupported field: DayOfMonth

我需要一种灵活的方法来解决这个问题,因为我试图整理一个来自Joda Time JSP标签的JSTL formatting library for java.time分叉。

编辑:我不认为它与另一个问题完全相同。这更为一般,因为我发现问题也与模式有关。我告诉你,解决方案的答案是那个也能解答我的解决方案。无论如何,我已经编辑了标题,以便更容易找到它。

1 个答案:

答案 0 :(得分:2)

所以,在写这篇文章时我发现the solution。当然要归功于java.time mastermind Stephen。

为什么格式化程序如果需要还没有恢复到ZoneId.systemDefault()只是为了逃避我。