Bri*_*ian 37 java datetime date java-8 java-time
Java的8位的DateTimeFormatter类有一个方法,ofPattern(String pattern)即让您从一串定义的格式A-z,a-z信件.这些例子并没有明确的区别y,今年的时代和Y,以星期为一年.它是什么?
Symbol Meaning Presentation Examples
------ ------- ------------ -------
y year-of-era year 2004; 04
Y week-based-year year 1996; 96
Run Code Online (Sandbox Code Playgroud)
小智 36
这是"年 - 周"风格日期的年份值,如2006W52.如果所涉及的一周跨越年份界限,它可能会在年代的价值中减去+1或-1.
见http://en.wikipedia.org/wiki/ISO_8601#Week_dates
Bas*_*que 24
其他一些答案很有趣,但很复杂。这是一个希望更简单的答案,可以让您找到方向。
y和u(小写)y年代的字符只是日历年,西方和世界大部分地区使用的常规年份,基于公历。
该DateTimeFormatter班还采用u了几乎同样的事情。对于当代日期,没有区别。有关详细信息,请参阅uuuu与Javayyyy中的DateTimeFormatter格式化模式代码?.
对于我们在日常生活中使用的常规日期,您将使用格式模式解析或生成表示日期值的文本,例如:
DateTimeFormatter.ofPattern( "dd/MM/yyyy" ) ;
Run Code Online (Sandbox Code Playgroud)
…或者…
DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,2019 年 12 月 30 日星期一都将被解析如下:
LocalDate localDate = LocalDate.parse( "30/12/2019" ) ;
Run Code Online (Sandbox Code Playgroud)
localDate.toString(): 2019-12-30
Y (大写)各个行业的许多人发现按周跟踪时间很有用,为一年中的每个星期分配一个数字。
有多种方法可以定义一周,例如从星期日或星期一开始。因此,有多种方法可以定义一年中的一周。第 1 周有 1 月 1 日吗?还是第 1 周有一年的第一个星期日?
在ISO 8601标准,每周定义为起始于周一。第 1 周是新日历年的第一个星期四。
这个定义意味着以周为基础的一年有 52 或 53 个整周,总是 7 天(周一至周日),一年的长度为 364 天或 371 天。相比之下,一个日历年有 365 或 366 天,跨越 52 个部分周。
因此,日期 2019-12-30(2019 年 12 月 30 日,星期一)实际上是 2020 年基于周的年份的第一周。
YYYY请在格式模式中使用大写表示 2019-12-30 的日期。yyyy。ISO 8601 标准定义了用于表示基于周的一年中一周内的日期的特定格式:YYYY-Www-d 其中 theYYYY是基于周的年份,the-W是固定的,theww表示周数 1-52 或 1 -53,d代表周一至周日运行 1-7 的星期几。
因此,2019 年 12 月 30 日星期一是:2020-W01-1表示基于周的 2020 年、一年的第一周和一周的第一天(星期一)。
要使用星期几解析 ISO 8601 周,我们可以使用DateTimeFormatter. 无需使用 定义格式模式YYYY,因为这项工作已经为您完成。使用内置的DateTimeFormatter.ISO_WEEK_DATE.
String output = localDate.format( DateTimeFormatter.ISO_WEEK_DATE ) ;
Run Code Online (Sandbox Code Playgroud)
2020-W01-1
同样,解析。
LocalDate localDate =
LocalDate.parse(
"2020-W01-1" ,
DateTimeFormatter.ISO_WEEK_DATE
)
;
Run Code Online (Sandbox Code Playgroud)
localDate.toString(): 2019-12-30
该ThreeTen-EXTRA库将功能添加到java.time内置Java类。
org.threeten.extra.YearWeek该库提供了YearWeek类。如果您根据ISO 8601 对一周和基于周的年的定义使用基于周的年,那么这正是您所需要的。
这个类可以在常规日期格式和面向周的格式之间来回转换。
LocalDate localDate = LocalDate.of( 2019 , Month.DECEMBER , 30 ) ; // Monday 2019-12-30. Its week-based year is 2020.
YearWeek yearWeek = YearWeek.from( localDate ) ;
String wFormatted = yearWeek.toString() ;
Run Code Online (Sandbox Code Playgroud)
2020-W01
从中得到一个日期。
LocalDate localDate = yearWeek.atDay( DayOfWeek.MONDAY ) ;
Run Code Online (Sandbox Code Playgroud)
localDate.toString(): 2019-12-30
| 归档时间: |
|
| 查看次数: |
7792 次 |
| 最近记录: |