如何在 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
-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()
,因为它隐藏了对系统时区的依赖。
我需要以 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
-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()
,因为它隐藏了对系统时区的依赖。