根据请求URL,我必须将日期转换为不同请求的时区,并将日期和时间返回为字符串。我正在使用Java 8和Spring Boot和Mongo 3.2
因此,在服务方法中,我首先将时区设置为下面的时区,
TimeZone.setDefault(TimeZone.getTimeZone(TIME_ZONE))
但我注意到,它将更改整个Java应用程序的时区。因此,即使是方法退出,时区也将是我以前设置的时区。
因此,setDefault
方法级别,我在下面的SimpleDateFormat
中专门设置它,
(分配是一个 java.util.Date
作为属性的分配文档类,该属性命名为sigsmentingDate,映射到mongodb集合。在mongo db db sistigonmentDate中,topentenddate作为utc存储)
java.text.DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone(timezone));
Date assignmentEndDate = assignment.getAssignmentEndDate();
formatter.format(assignmentEndDate);
这样,它不会更改应用程序级时区域。这是这种情况的正确方法吗?
利用Java 8中包含的新日期时间API。
ZoneId zoneId = ZoneId.of("America/Chicago");
您可以从 Instant 开始,Java up date均等。
Instant instant = Instant.now();
ZonedDateTime zonedDateTime = instant.atZone(zoneId);
或
您也可以从 使用 ZonedDateTime
您可以将DateTime作为 LocalDateTime ,时区Anostic类并转换为ZonedDateTime。
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(zoneId);
您可以在旧日期时间类别中进行easliy Switch&通过在每个新的/旧日期类别上访问助手方法的新时间。
在保存到Mongo数据库时更改为Java Util日期
//From ZonedDateTime to java util date.
Date oldDate = Date.from(zdt.toInstant());
//From Instant to java util date
Date oldDate = Date.from(instant);
//From Date to Instant.
Instant instant = date.toInstant();
所有新的日期时间API都内置了默认的格式。
//2007-12-03T10:15:30-06:00[America/Chicago]
String zonedDatetime = zonedDateTime.toString();
对于Specfic格式,您可以始终将 DateTimeFormatter 传递到以下方法。
zonedDateTime.format(formatter)