Had*_*ari 33 timezone datetime android
我正在使用此方法将UTC时间转换为另一个时区:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parsed = format.parse("2011-03-01 15:10:37");
TimeZone tz = TimeZone.getTimeZone("America/Chicago");
format.setTimeZone(tz);
String result = format.format(parsed);
Run Code Online (Sandbox Code Playgroud)
所以输入是2011-03-01 15:10:37
这个(结果的值)的输出2011-03-01 05:40:37
.虽然它似乎是关闭,并根据这个链接,它应该是2011-03-01 09:10:37
.
我究竟做错了什么?
Had*_*ari 69
事实证明代码几乎是正确的,我没有考虑的是,在解析最初String
获取Date
对象时,它使用默认系统TimeZone
,因此源日期不是我预期的UTC.
诀窍是在将日期解析为UTC时设置时区,然后将其设置为目标TimeZone
.像这样的东西:
SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sourceFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date parsed = sourceFormat.parse("2011-03-01 15:10:37"); // => Date is in UTC now
TimeZone tz = TimeZone.getTimeZone("America/Chicago");
SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
destFormat.setTimeZone(tz);
String result = destFormat.format(parsed);
Run Code Online (Sandbox Code Playgroud)
QBL*_*ive 14
将日期字符串格式为"2011-06-23T15:11:32"转换为时区.
private String getDate(String dateString) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date value = null;
try {
value = formatter.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy hh:mmaa");
dateFormatter.setTimeZone(TimeZone.getDefault());
String dt = dateFormatter.format(value);
return dt;
}
Run Code Online (Sandbox Code Playgroud)
以下代码对我来说可以很好地将日期从一个 tz 更改为另一个。它也考虑了 DayLightSaving。
public static Calendar changeTimezoneOfDate(Date date, TimeZone fromTZ, TimeZone toTZ) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long millis = calendar.getTimeInMillis();
long fromOffset = fromTZ.getOffset(millis);
long toOffset = toTZ.getOffset(millis);
long convertedTime = millis - (fromOffset - toOffset);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(convertedTime);
return c;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41941 次 |
最近记录: |