首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8 DateTimeFormatter的符号"F“

Java 8 DateTimeFormatter的符号"F“
EN

Stack Overflow用户
提问于 2021-07-31 02:04:15
回答 1查看 55关注 0票数 2

java.time.format.DateTimeFormatterBuilder

代码语言:javascript
复制
/** Map of letters to fields. */
private static final Map<Character, TemporalField> FIELD_MAP = new HashMap<>();

static {
    // SDF = SimpleDateFormat
    // ...
    FIELD_MAP.put('F', ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH);  // SDF, LDML
    // ...
}

这表明符号"F“在SimpleDateFormatter中可能具有相同的含义。

在SDF中,符号"F“是指一周中指定日期的序号,如”5月的第二个星期日“,即母亲节(US)。

使用SDF,我可以将2021年的母亲节(美国)定义为"2021-05-2-Sun“,其模式为”yyyy F“。

但是带有DateTimeFormatter符号"F“的任何图案都可能导致DateTimeParseException。

我发现一个已经“解决”的问题:

[JDK-8169482]java.time.DateTimeFormatter javadoc: f不是每月一周

但它只“修正”了javadoc!Σ(っ°Д°;)っ

符号"F“仍然具有未定义的行为。

SDF中令人困惑的描述"F:月中的一周“可能就是原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-31 02:32:12

由于错误的解决方法是修复文档,而不是修复DateTimeFormatter的实现,所以似乎F的意思是ALIGNED_DAY_OF_WEEK_IN_MONTH实际上是有意的,而且// SDF注释还没有被纠正。

因为它的意思是ALIGNED_DAY_OF_WEEK_IN_MONTH,像"2021-05-2-Sun“这样的日期没有多大意义。你只花了一个月一年和一周中的一天。这还不足以弄清楚它是哪一天。它不会发生在"2021-05-2-Sun",但是在“2021-05-2-星期一”的情况下,一周中的一天(星期一)和一周中的对齐日(2)甚至可以说出每周哪一天应该是哪一天。:)

要解析“每周第n天”,您需要ALIGNED_WEEK_OF_MONTH,而DateFormatter没有符号。(请注意,W是一个月中的不结盟周。)但是不要担心,您可以使用TemporalField将任何appendValue附加到模式中。

代码语言:javascript
复制
DateTimeFormatter formatter =
    new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-")
        .appendValue(ChronoField.ALIGNED_WEEK_OF_MONTH)
        .appendPattern("-EEE").toFormatter(Locale.ENGLISH);

用法:

代码语言:javascript
复制
System.out.println(LocalDate.parse("2021-05-2-Sun", formatter));
// 2021-05-09
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68598541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档