[英]Convert input String date time from different timezone to UTC
我的系统位于新加坡(时区 - “亚洲/新加坡”)从印度尼西亚的外部系统(时区 - “Asia / Jarkata”)获得字符串日期时间(yyyy-MM-dd HH:mm:ss)。
如何在java 1.7中将收到的String datetime转换为UTC?
这是我的代码:
public void convertToUtc() {
String inputTime = "2018-02-02 10:09:00";
TimeZone inputTz = TimeZone.getTimeZone("Asia/Jarkarta");
TimeZone utcTz = TimeZone.getTimeZone("UTC");
SimpleDateFormat inputSdf = new SimpleDateFormat(DateTimeUtils.DATE_TIME_FORMAT);
inputSdf.setTimeZone(inputTz);
SimpleDateFormat utcSdf = new SimpleDateFormat(DateTimeUtils.ISO_DATE_TIME_FORMAT);
utcSdf.setTimeZone(utcTz);
// From time
Date fromDate = null;
try {
fromDate = inputSdf.parse(inputTime);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Convert to UTC
String sUtcDateTime = utcSdf.format(fromDate);
System.out.println("UTC: " + sUtcDateTime); // UTC: 2018-02-02T10:09:00.000Z. Expected 2018-02-02T03:09:00.000Z
}
janith1024的回答是正确的。 但是,我认为真正的问题是旧的(和过时的) TimeZone
类行为很糟糕,并没有告诉你拼写错误。 毕竟,我们都可以做到这一点。 所以真正的解决方案是使用java.time,即现代Java日期和时间API。 在Java 7(和6)上将ThreeTen Backport添加到您的项目中,导入:
import org.threeten.bp.ZoneId;
接着:
ZoneId inputTz = ZoneId.of("Asia/Jarkarta");
这会给你一个org.threeten.bp.zone.ZoneRulesException: Unknown time-zone ID: Asia/Jarkarta
。 我应该说这大大增加了你发现拼写错误的机会(正确的拼写是亚洲/雅加达)。
指定的TimeZone,如果无法理解给定的ID,则为GMT区域。
但是我发布这个答案是因为你的问题不仅仅是一个例子。 我们一遍又一遍地看到来自旧日期和时间类的Stack Overflow问题显示出令人惊讶的行为,特别是没有检测到我们传递给他们的数据的问题,这些问题很容易被发现。 我非常热烈地建议使用现代API。
在Java 8及更高版本中,java.time是内置的,您应该使用子包而不是org.threeten.bp
从java.time
导入日期和时间类。
java.time
。 java.time
。 java.time
到Java 6和7(用于JSR-310的ThreeTen)。 我检查你的代码在时区有一个拼写错误,所以我纠正它
public static void convertToUtc() {
String inputTime = "2018-02-02 10:09:00";
TimeZone inputTz = TimeZone.getTimeZone("Asia/Jakarta");
TimeZone utcTz = TimeZone.getTimeZone("UTC");
SimpleDateFormat inputSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
inputSdf.setTimeZone(inputTz);
SimpleDateFormat utcSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
utcSdf.setTimeZone(utcTz);
// From time
Date fromDate = null;
try {
fromDate = inputSdf.parse(inputTime);
}
catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Convert to UTC
String sUtcDateTime = utcSdf.format(fromDate);
System.out.println("UTC: " + sUtcDateTime); // print this UTC: 2018-02-02 03:09:00.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.