Jig*_*shi 138
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,17);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
Date d = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
另见
Eug*_*sev 16
你能展示用于设置日期对象的代码吗?无论如何<您可以使用此代码初始化日期:
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2011-01-01 00:00:00")
Run Code Online (Sandbox Code Playgroud)
我想贡献现代的答案。这包括使用java.time
,现代的Java日期和时间API,而不是旧的Date
,也Calendar
除非有没有办法避免。
您的问题很可能确实是时区问题。在IST 2011年8月9日星期二00:00:00时,尚未到达IST午夜以西的时区。现在仍然是8月8日。例如,如果您用于将日期输入Excel的API希望使用UTC,则日期将是您想要的日期的前一天。我认为真正有效的解决方案是产生一个00:00 UTC的日期时间(或在另一端预期和使用的任何时区或偏移量)。
LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
ZonedDateTime utcDateDime = yourDate.atStartOfDay(ZoneOffset.UTC);
System.out.println(utcDateDime);
Run Code Online (Sandbox Code Playgroud)
此打印
2018-02-27T00:00Z
Run Code Online (Sandbox Code Playgroud)
Z
表示UTC(将其视为UTC或Zulu时区的零偏移量)。当然,更好的是,如果您可以将LocalDate
第一行代码中的传递给Excel。它不包含时间,因此不会造成混乱。另一方面,如果您需要一个老式的Date
对象,请在进行操作之前进行转换Date
:
Date oldfashionedDate = Date.from(utcDateDime.toInstant());
System.out.println(oldfashionedDate);
Run Code Online (Sandbox Code Playgroud)
在我的计算机上打印
Tue Feb 27 01:00:00 CET 2018
Run Code Online (Sandbox Code Playgroud)
不要上当,这是正确的。我的时区(欧洲中部时间)在2月(标准时间)与UTC的时差为+01:00,因此此处的01:00:00等于UTC的00:00:00。它只是Date.toString()
抓住JVM时区,并使用它来产生字符串。
如何将其设置为下午5:30?
要直接回答你直接的问题,如果你有一个ZonedDateTime
,OffsetDateTime
或者LocalDateTime
,在所有这些情况下,下面将完成你的要求为:
yourDateTime = yourDateTime.with(LocalTime.of(17, 30));
Run Code Online (Sandbox Code Playgroud)
如果yourDateTime
是LocalDateTime
的话2018-02-27T00:00
,现在将会是2018-02-27T17:30
。类似地,对于其他类型,也仅在适当时包括偏移量和时区。
如果您只有日期,如上面的第一个片段中所示,还可以向其中添加日期信息:
LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
LocalDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30));
Run Code Online (Sandbox Code Playgroud)
对于大多数用途,您应该更喜欢在特定时区中添加日期,例如
ZonedDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30))
.atZone(ZoneId.of("Asia/Kolkata"));
Run Code Online (Sandbox Code Playgroud)
这产生了2018-02-27T17:30+05:30[Asia/Kolkata]
。
Date
和Calendar
VSjava.time
在Date
您使用以及类Calendar
和SimpleDateFormat
在其他的答案中使用的早已过时的,并且SimpleDateFormat
特别是已被证明麻烦。在所有情况下,现代Java日期和时间API都可以更好地使用。这就是为什么我想为仍在访问的一个老问题提供此答案。
链接: Oracle Tutorial Date Time,说明了如何使用java.time
。
归档时间: |
|
查看次数: |
180043 次 |
最近记录: |