如何将小时,分钟,秒和毫秒变为零?

时间:2016-07-08 15:14:47

标签: java-8 java-time

我试图让我的格式为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

2 个答案:

答案 0 :(得分:7)

好吧不要说“我想用它来使用当前时间”!这就是这样做:

OffsetTime.now(ZoneOffset.UTC)

如果您只需要OffsetDateTimeLocalDate提供零偏移和午夜,您可以使用:

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);

答案 1 :(得分:0)

我不太确定您是否可以使用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编码:)