我想从utc java.util.date time(以utc为单位)转换为服务器的本地时间。我们正在使用jdk8。我该怎么做?
我的要求是,我们得到的是utc的最后一次。我们需要在门户中以本地时区显示用户友好的日期。下面是我的代码,这是不工作。
import java.time.*;
import java.util.Date;
private String getDateInString(Date lastTime) {
Date in = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
LocalDateTime monthLdt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault()).minusMonths(1);
Date monthAgo = Date.from(monthLdt.atZone(ZoneId.systemDefault()).toInstant());
LocalDateTime weekLdt = LocalDateTime.now().minusWeeks(1);
Date weekAgo = Date.from(weekLdt.atZone(ZoneId.systemDefault()).toInstant());
LocalDateTime dayLdt = LocalDateTime.now().minusDays(1);
Date dayAgo = Date.from(dayLdt.atZone(ZoneId.systemDefault()).toInstant());
if (lastTime.before(monthAgo)) {
return "Month ago";
} else if (lastTime.before(weekAgo)) {
return "Week Ago";
} else if (lastTime.before(dayAgo)) {
return "Day Ago";
} else {
LocalDateTime lastLdt = LocalDateTime.ofInstant(lastTime.toInstant(), ZoneId.systemDefault());
String min = lastLdt.getMinute() + "";
if (lastLdt.getMinute() < 10) {
min = "0" + min;
}
return "TODAY," + lastLdt.getHour() + ":" + min;
}
}
1条答案
按热度按时间uemypmqf1#
全力以赴java.time
两点:
在java.time上全力以赴。当你收到一个老式的
Date
,将其转换为Instant
首先,使用java.time进行进一步的转换和处理,这样就不需要处理Date
. 这可以节省大量转换,从而使代码更简单。java.time中要使用的类是
ZonedDateTime
. 自Date
是一个时间点,为了进行有意义的比较,您在java.time中也需要一个定义时间点的类。LocalDateTime
没有。一ZonedDateTime
是时区中的日期和时间,所以我们需要的是本地时间(不管类名是什么)LocalDateTime
).另外,如果问题中的代码是在早上运行的,而最后一次是在前一天晚上,所以不到一整天之前,它看起来会像
TODAY,18:32
即使那是昨天。我也会使用DateTimeFormatter
用于格式化时间。试一下,以下两个日期分别是我所在时区的昨天晚上和今天上午:
输出为: