如何让我的小时、分钟、秒和毫秒为零?
How do I get my hour, minutes, seconds, and milliseconds to be zeros?
我正在尝试将格式设置为 2016-07-08T00:00:00.000Z。
String myDate = "20160708";
LocalDate myLocalDate = LocalDate.parse(myDate, DateTimeFormatter.BASIC_ISO_DATE);
OffsetDateTime myOffsetDate = myLocalDate.atTime(OffsetTime.now(ZoneOffset.UTC));
System.out.println(myOffsetDate); //2016-07-08T14:58:23.170Z
好吧不说"I want it to use the current time"!这就是它正在做的事情:
OffsetTime.now(ZoneOffset.UTC)
如果您只想通过提供零偏移量和午夜从 LocalDate
获得 OffsetDateTime
,您可以使用:
OffsetDateTime myOffsetDate = myLocalDate
.atTime(LocalTime.MIDNIGHT)
.atOffset(ZoneOffset.UTC);
或者如果您愿意:
OffsetDateTime myOffsetDate = myLocalDate
.atTime(OffsetTime.of(LocalTime.MIDNIGHT, ZoneOffset.UTC));
(个人比较喜欢第一个版本,我自己...)
请注意,这只是让您正确 OffsetDateTime
。如果你想用毫秒和秒来格式化它,你需要明确地这样做:
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
System.out.println(myOffsetDate.format(formatter));
如评论中所述,如果您发现 ZonedDateTime
而不是 OffsetDateTime
,则可以使用
ZonedDateTime myOffsetDate = myLocalDate.atStartOfDay(ZoneOffset.UTC);
我不太确定您是否可以使用 LocalDate 获得具有给定字符串的 ISO_INSTANCE 日期格式。但您可以使用下面的 java 8 段代码来获得所需的格式。
public String getISO_8601DateFormat(String yyyyMMdd){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String requiredFormat = null;
try {
Date inputDate = sdf.parse(yyyyMMdd);
long dateLongRepresentation = inputDate.getTime();
long myTimeZoneOffset = TimeZone.getTimeZone(ZoneId.systemDefault()).getOffset(inputDate.getTime());
Instant instance = Instant.ofEpochMilli(dateLongRepresentation + myTimeZoneOffset);
requiredFormat = instance.toString();
} catch (ParseException e) {
e.printStackTrace();
}
return requiredFormat;
}
享受与 java 的编码:)
我正在尝试将格式设置为 2016-07-08T00:00:00.000Z。
String myDate = "20160708";
LocalDate myLocalDate = LocalDate.parse(myDate, DateTimeFormatter.BASIC_ISO_DATE);
OffsetDateTime myOffsetDate = myLocalDate.atTime(OffsetTime.now(ZoneOffset.UTC));
System.out.println(myOffsetDate); //2016-07-08T14:58:23.170Z
好吧不说"I want it to use the current time"!这就是它正在做的事情:
OffsetTime.now(ZoneOffset.UTC)
如果您只想通过提供零偏移量和午夜从 LocalDate
获得 OffsetDateTime
,您可以使用:
OffsetDateTime myOffsetDate = myLocalDate
.atTime(LocalTime.MIDNIGHT)
.atOffset(ZoneOffset.UTC);
或者如果您愿意:
OffsetDateTime myOffsetDate = myLocalDate
.atTime(OffsetTime.of(LocalTime.MIDNIGHT, ZoneOffset.UTC));
(个人比较喜欢第一个版本,我自己...)
请注意,这只是让您正确 OffsetDateTime
。如果你想用毫秒和秒来格式化它,你需要明确地这样做:
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
System.out.println(myOffsetDate.format(formatter));
如评论中所述,如果您发现 ZonedDateTime
而不是 OffsetDateTime
,则可以使用
ZonedDateTime myOffsetDate = myLocalDate.atStartOfDay(ZoneOffset.UTC);
我不太确定您是否可以使用 LocalDate 获得具有给定字符串的 ISO_INSTANCE 日期格式。但您可以使用下面的 java 8 段代码来获得所需的格式。
public String getISO_8601DateFormat(String yyyyMMdd){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String requiredFormat = null;
try {
Date inputDate = sdf.parse(yyyyMMdd);
long dateLongRepresentation = inputDate.getTime();
long myTimeZoneOffset = TimeZone.getTimeZone(ZoneId.systemDefault()).getOffset(inputDate.getTime());
Instant instance = Instant.ofEpochMilli(dateLongRepresentation + myTimeZoneOffset);
requiredFormat = instance.toString();
} catch (ParseException e) {
e.printStackTrace();
}
return requiredFormat;
}
享受与 java 的编码:)