如何用Java保存iso8601日期?
我需要按以下格式保存当前的如何用Java保存iso8601日期?,java,datetime,iso8601,Java,Datetime,Iso8601,我需要按以下格式保存当前的日期+7天: 20161107T12:00:00+0000 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:
日期+7天:
20161107T12:00:00+0000
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");
其中,“T”
后面的零件是固定的
我尝试了以下方法:
20161107T12:00:00+0000
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");
使用此“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的建议
或者-上面的字符串可能没有正确的偏移量:
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-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的建议
或者-上面的字符串可能没有正确的偏移量:
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()
,因为它隐藏了对系统时区的依赖关系。请检查String Date=sdf.format(Date1)+“T12:00:00+0000”代码>。另外,请遵循Java命名约定-不要对变量使用大写名称请查看String Date=sdf.format(Date1)+“T12:00:00+0000”代码>。另外,请遵循Java命名约定-不要对变量使用大写名称