【发布时间】:2021-07-15 08:48:10
【问题描述】:
我想将 UTC java.util.date 时间(UTC)转换为服务器的本地时间。我们使用 jdk8。我该怎么做?
我的要求是,我们在 UTC 中获得 lastTime。我们需要在门户中以本地时区显示用户友好的日期。下面是我的代码,它不起作用。
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;
}
}
【问题讨论】:
-
你应该使用
java.time而不是java.util.Date。 -
您可以使用
ZonedDateTime或OffsetDateTime,它们都有now()方法,查看一些java.time文档。它会很好地为您服务... -
该代码看起来正确或接近。请问你的问题是什么?尽管我更愿意在 java.time 中进行
ZonedDateTime对象之间的所有比较。此外,如果在早上运行并且最后一次是前一天晚上,那么不到一整天前,它似乎会像TODAY,18:32那样产生,即使那是昨天。我还会使用DateTimeFormatter来格式化时间。 -
lastTime 我们得到的输入是 UTC,我们需要返回友好文本为“Month ago”、“Day ago”、“Week Ago”,如果是今天,我们需要返回“Today, "其次是小时和分钟。喜欢:今天,11:30。抱歉,不明白为什么我们需要使用 DateTimeFormatter。可以分享示例代码吗?
-
@pal.nag 我回答你的问题了吗?问是因为我不太清楚是哪个,但你遇到了麻烦。我的回答确实显示了
DateTimeFormatter如何帮助生成像23:00这样的字符串,而无需我们“手动”连接字符串以处理前导零。
标签: java date datetime zoneddatetime localdatetime