我在UTC
时区的数据库中有数据,在客户端上有一些特定于时区的逻辑。
决定在用户的时区从服务器返回数据,因此有一个流程:
"X-TIMEZONE"
)Filter
中)并为其设置当前时区(按请求)所以问题是设置请求范围的时区,它甚至可能吗?
我发现Timezone.setDefault()
通常会为应用程序设置时区。
感谢。
答案 0 :(得分:1)
Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
使其成为UTC。我传入的可变时区只是我想要的目标时区。这基本上增加或减去毫秒,以根据您想要的时区将其转换为时间。时间日历对象应该是您要查找的时间。
Calendar time = Calendar.getInstance();
time.setTime(date);
TimeZone localTimeZone = TimeZone.getTimeZone(timezone);
int offSet = localTimeZone.getOffset(date.getTime());
time.set(Calendar.MILLISECOND, time.get(Calendar.MILLISECOND) + offSet);
在此链接中,您可以找到有效时区选项的列表。http://tutorials.jenkov.com/java-date-time/java-util-timezone.html
答案 1 :(得分:0)
您可以尝试检测客户端的时区。但最终确定用户所需时区的唯一可靠方法是询问她/他。
TimeZone.setDefault
会影响该JVM中运行的所有所有应用程序的所有线程中的所有代码。这样做只是作为最后的手段。而是传递一个表示所需时区的对象,并在可选的时区参数中使用它。
与最早版本的Java捆绑在一起的麻烦的旧日期时间类已被Java 8及更高版本中内置的java.time类所取代。许多功能都被反向移植到Java 6& 7在ThreeTen-Backport中,并在ThreeTenABP中进一步适应Android。
以UTC格式获取当前时刻。
Instant instant = Instant.now();
应用时区以获得ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
要创建表示该值的字符串,请致电toString
或使用DateTimeFormatter
。 Search Stack Overflow有很多例子。