我有一个特定的日期和时间+10:00 GMT(澳大利亚/墨尔本),这是来自谷歌api在以下格式:-
2015 - 05 - 12 - t14:00:00.000 + 10点
现在,我要根据设备当前时区转换上述时间。
例如:-
以上时间在+5:30 GMT(印度)应该是2015-05-12 9:30:00
我怎样才能实现它?
我下面的代码是:-
SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sourceFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
Date parsed = null;
try {
parsed = sourceFormat.parse("2015-05-12 14:00:00");
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // => Date is in UTC now
TimeZone tz = TimeZone.getTimeZone(TimeZone.getDefault().getID());
SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
destFormat.setTimeZone(tz);
String result = destFormat.format(parsed);
System.out.println(result);
但结果是2015-05-12 19:30,这是错误的…
就此而言,我认为您对getTimeZone("GMT")
的看法是错误的
应该使用getTimeZone("GMT+10:00"));
,因为GMT是+/-0:00
看看我发布的文档:)
请尝试一下,它在这里工作
try {
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT+10"));
//Local time zone
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Time in GMT
String date = dateFormatLocal.format(dateFormatGmt.parse("2015-05-12 14:00:00"));
LogUtil.LOGD(Constants.ACTIVITY_TAG, "Date- " + date);
}catch (ParseException e) {
e.printStackTrace();
}
您还可以使用Joda库来简化工作。
private String showTimeStringExample(String timeStamp) {
//timestamp = "2015-05-12T14:00:00.000+10:00"
// use Joda to parse the time stamp and convert it to java
final Date date = ISODateTimeFormat.dateTimeParser().parseDateTime(timeStamp).toDate();
// use the format you had in your question, setting the locale to the device's default
SimpleDateFormat destFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss",
getResources().getConfiguration().locale
);
// comes out as "2015-05-12 05:00:00 in the UK
return destFormat.format(date);
}
Gradle依赖性:
compile 'joda-time:joda-time:2.3'