繁体   English   中英

如何在Java中保存iso8601日期?

[英]How to save iso8601 Date in Java?

我需要以iso8601格式保存当前Date + 7天,如下所示:

20161107T12:00:00+0000 

固定在"T"后面的部分。

我尝试了以下方法:

Calendar exDate1 = Calendar.getInstance();
exDate1.add(Calendar.DATE , 7);
Date Date1 = exDate1.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDD");
String Date = sdf.format(Date1 + "T12:00:00+0000");

没有成功。

使用此“ yyyyMMdd”模式

    Calendar currentDate = Calendar.getInstance();
    currentDate.add(Calendar.DATE, 7);
    Date date = currentDate.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    String formattedDate = sdf.format(date).concat("T12:00:00+0000");

另一种方法是在Java-8中使用新的java.time

String result =
    DateTimeFormatter.BASIC_ISO_DATE.format(
        LocalDate.now(ZoneOffset.UTC).plusDays(7)
    ) + "T12:00:00+0000";
System.out.println(result); // 20161114T12:00:00+0000 

根据您选择的时区偏移量进行更新:

您试图隐式使用系统时区来确定当前本地时间,但应用了UTC + 0000的固定偏移量。 这是不一致的组合。 如果应用这样的零偏移,则还应该根据UTC + 0000确定当前日期,而不是在系统时区( ZoneId.systemDefault() )中。

@Nim编辑的建议

或者-上面的字符串可能没有正确的偏移量:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HH:mm:ssZ"); String date = LocalDate.now().plusDays(7).atTime(12, 0).atZone(ZoneId.systemDefault()).format(formatter); 

将产生结果:

20161114T12:00:00 + 0100

这可能不是您想要的。 我还尝试避免不带任何参数的表达式LocalDate.now() ,因为它隐藏了对系统时区的依赖性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM