我正在用java开发一个软件。
我从服务器获得格林威治标准时间的时间戳。该软件可以在世界任何地方使用。现在我想获取运行软件的本地时区,并将此 GMT 时间转换为本地时间。
请告诉我该怎么做?
要获取您的本地时区:
Calendar.getInstance().getTimeZone().getDisplayName()
对于转换:
Java 中的日期时区转换?
假设您的timestamp
是Date
或Number
:
final DateFormat formatter = DateFormat.getDateTimeInstance();
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println(formatter.format(timestamp));
如果您的时间戳是作为String
给出的,您首先必须解析它。您会在 SimpleDateFormat
中找到大量自定义格式的示例,这是一个具有内置格式的简单示例:
final DateFormat formatter = DateFormat.getDateTimeInstance();
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
final Date timezone = formatter.parse("2012-04-14 14:23:34");
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println(formatter.format(timezone));
看看Joda-Time。它具有所需的所有日期相关功能
假设服务器时间的格式yyyy/MM/dd HH:mm:ss.SSS
这样工作:
String serverTime = "2017/12/06 21:04:07.406"; // GMT
ZonedDateTime gmtTime = LocalDateTime.parse(serverTime, DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS")).atZone(ZoneId.of("GMT"));
LocalDateTime localTime = gmtTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();