要获得本月的1-12数字:
LocalDate.now() .getMonthValue()
最好指定所需/预期的时区。
LocalDate.now( ZoneId.of( "America/Montreal" ) ).getMonthValue()
类似地,呼叫
.getYear()和
.getDayOfMonth()。细节
它返回错误的月份
就像其他人所说的,在 1月至12月
Calendar的 几个月中,他们疯狂地编号为0-11,
而不是1-12。在旧的日期时间类中,许多糟糕的设计决策之一。这些类现在已被遗留,由java.time类取代。
那么有没有解决的办法?
是的,有一种解决方法。使用良好的日期时间库,而不要使用java.util.Date/Calendar的混乱信息。现代方法是使用java.time类。
当前时刻时区对于获取当前日期和时间至关重要。对于任何给定时刻,日期和挂钟时间会因区域而异。
ZoneId z = ZoneId.of( "America/Montreal" );ZonedDateTime zdt = ZonedDateTime.now( z );
您可以查询各种组成部分,例如年,月号,通过
Month枚举的月本地化名称和月中的某天。
System.out.println ( "Current: " + zdt );System.out.println( "Year is " + zdt.getYear() );System.out.println( "Month is " + zdt.getMonthValue() );System.out.println( "Month name is " + zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ); // Or Locale.US, Locale.ITALY, etc.System.out.println( "Day is " + zdt.getDayOfMonth() );
当前:2016-12-14T04:54:44.802-05:00 [美国/蒙特利尔]
年份是2016
月是12
月的名字是décembre
一天是14
请参阅IdeOne.com中的实时代码。
如果您只关心日期而不是时间,请使用
LocalDate该类。
具体时刻LocalDate.now( z );
您可以将时刻指定为自UTC
1970年第一时刻的纪元以来的毫秒数。
long input = 1_234_567_898_765L ;Instant instant = Instant.ofEpochMilli( input );
Instant.toString():2009-02-13T23:31:38.765Z
该
Z输出中的in
Zulu表示UTC。
您可以分配时区以调整为特定的挂钟时间。
ZoneId z = ZoneId.of( "America/Montreal" );ZonedDateTime zdt = instant.atZone( z );
zdt.toString():2009-02-13T18:31:38.765-05:00 [美国/蒙特利尔]
请参阅IdeOne.com中的实时代码。
我 不 建议这样交换日期时间数据。更好地序列化为ISO
8601格式的文本。例如:
2009-02-13T23:31:38.765Z
关于java.time
该java.time框架是建立在Java
8和更高版本。这些类取代麻烦的老传统日期时间类,如
java.util.Date,
Calendar,和
SimpleDateFormat。
现在处于维护模式的Joda-
Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack
Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
- Java SE 8 和 SE 9 及更高版本
- 内置的
- 标准Java API的一部分,具有捆绑的实现。
- Java 9添加了一些次要功能和修复。
- Java SE 6 和 SE 7
- java.time的许多功能在 ThreeTen- Backport中都被反向移植到Java 6和7 。
- 安卓系统
- 所述 ThreeTenABP 项目适应 ThreeTen-反向移植 (上述)为Android特异性。
- 请参阅 如何使用… 。
该ThreeTen-额外项目与其他类扩展java.time。该项目是将来可能向java.time添加内容的试验场。你可能在这里找到一些有用的类,比如
Interval,
YearWeek,
YearQuarter,和更多。
旧答案-乔达时间
更新:现在处于维护模式的Joda-
Time项目建议迁移到java.time类。
- 立即使用Joda-Time 2.3。
- 将来,使用Java 8,可以考虑迁移到JSR 310:Date and Time API,该API取代了Date / Calendar类,并且受Joda-Time的启发。
// © 2013 Basil Bourque. This source pre may be used freely forever by anyone taking full responsibility for doing so.// import org.joda.time.*;// Generally best to be explicit about time zone rather than depend on default.DateTimeZone denverTimeZone = DateTimeZone.forID( "America/Denver" );java.util.Locale locale = Locale.FRANCE;DateTime now = new DateTime( denverTimeZone );System.out.println( "Current Year, Month & Day for: " + now );System.out.println( "Year is " + now.year().getAsText( locale ) );System.out.println( "Month is " + now.monthOfYear().getAsText( locale ) );System.out.println( "Day is " + now.dayOfMonth().getAsText( locale ) );System.out.println(); // blank line.
运行时…
有一天Current Year, Month & Day for: 2013-12-04T01:58:24.322-07:00Year is 2013Month is décembreDay is 4
// Not generally a good idea to focus on integers for working with date-time, but you asked for it.DateTime someDateTime = new DateTime( 1234567898765L, DateTimeZone.UTC );System.out.println( "Set Value of 1234567898765L is: " + someDateTime );System.out.println( "Year is " + someDateTime.year().getAsText( locale ) );System.out.println( "Month is " + someDateTime.monthOfYear().getAsText( locale ) );System.out.println( "Day of month is " + someDateTime.dayOfMonth().getAsText( locale ) );System.out.println( "Day of week is " + someDateTime.dayOfWeek().getAsText( locale ) );System.out.println( "Day of year is " + someDateTime.dayOfYear().getAsText( locale ) );
运行时…
Set Value of 1234567898765L is: 2009-02-13T23:31:38.765ZYear is 2009Month is févrierDay of month is 13Day of week is vendrediDay of year is 44
PS:当我注意到您任意选择的Long导致了第十三星期五时,我感到不寒而栗!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)