在服务器代码中,我希望获得“天”,但不是服务器日期/时间,而是特定时区的“天”,特别是GMT+8。
我有这样的代码:
DateFormat formatter = new SimpleDateFormat("EEEE", Locale.ENGLISH);
String day = formatter.format(new Date()).toUpperCase();
availabilities.add(Availability.builder()
.day(day)
.from(LocalTime.now())
.to(LocalTime.now())
.build());
如何获取特定时区的“日期”,并构建一个返回LocalTime
对象的LocalTime.now()
,但不返回所述时区的当前时间。
例如,在撰写本文时,GMT+8现在是6:25,所以这将是LocalTime.now()
返回的时间,而不是位于不同时区的云服务器。
发布于 2020-10-29 06:31:22
SDF和new Date()
是旧的API,你不需要它们。例如,Date
是一个谎言;它并不代表日期,它实际上代表的是时间上的一个瞬间。这是愚蠢的--这就是为什么有一个新的API。
EDIT:通过调用ZonedDateTime
的now
方法使其更简单。
private static final ZoneId TARGET_ZONE = ZoneId.of("Singapore");
ZonedDateTime atTarget = ZonedDateTime.now(TARGET_ZONE);
DayOfWeek whatYouWant = atTarget.getDayOfWeek();
注意:你可以显式地使用+8,然后你会寻找一个OffsetDateTime
和atOffset(ZoneOffset.ofHours(8))
,但那是...真奇怪。谁会想要'UTC+8‘呢?没有人,除了飞机和在特定区域的军事行动,那肯定不是你的目标受众。
https://stackoverflow.com/questions/64582193
复制相似问题