java - 如何在Java中保存iso8601日期?

标签 java datetime iso8601

我需要将当前日期 + 7 天保存在 iso8601 中格式如下:

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

没有成功。

最佳答案

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

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的提议

Alternatively - the string above may not have the correct offset:

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(),因为它隐藏了对系统时区的依赖。

关于java - 如何在Java中保存iso8601日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40461229/

相关文章:

java - 负逻辑移位

java - 如何让 Android 服务保持 phonegap 用户界面的活力

python - Pandas:从 PyODBC 读取数据并解析不同列中的日期时间

javascript - 从 WebSQL 中的 javascript 将 currentDate 插入 WebSQL 时出现问题

php - Carbon 将 Iso 8601 字符串解析为 UTC 日期并将其记录到数据库

java - 将 OpenID 选择器与 Spring Security 结合使用

java - 如何使用 Selenium WebDriver 获取 CSS 选择器?

C# 解析日期时间 "Fri Jan 14 2011 14:56:36 GMT-0800 (Pacific Standard Time)"

PHP显示存储的时间数据,并在考虑不同时区的同时存储时间数据

python - 在 python 中将 ISO8601 格式转换为秒,无需使用任何外部库