gpt4 book ai didi

java - Android日期,回到夏令时会不会出错?

转载 作者:行者123 更新时间:2023-11-30 02:35:33 25 4
gpt4 key购买 nike

这个日期是从我的应用程序发送的,如下所示:

2014-10-29 09:00:17

数据库是这样存储的:

Wed Oct 29 2014 09:00:17 GMT+0100 (CET)

我从我的服务器得到一个日期,看起来像这样:

2014-10-29T08:00:17.000Z (one our less)

然后我将其转换为这样的日历日期:

public static long getUTCToMillis(String time) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
sdf.setTimeZone(TimeZone.getTimeZone("CET"));
try {
cal.setTime(sdf.parse(time));
return cal.getTimeInMillis();
} catch (ParseException e) {
e.printStackTrace();
}
return -1;
}

这总是将小时设置为 08:00,但我希望它像保存时一样转换回 09:00。如果我将时区设置为 UTC,我会得到 09:00,但是当夏令时再次开始时,这将如何工作?我怎样才能让它显示正确的时间?

最佳答案

看看TimeZone.getOffset(long time)

该方法返回 UTC 和您的目标时区之间的时差。

所以你可以这样做:

public static long getUTCToMillis(String time) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());

TimeZone timezone = TimeZone.getTimeZone("CET");

try {
Date date = sdf.parse(time);
long offSet = timezone.getOffset(date.getTime());
cal.setTime(date);
cal.add(Calendar.MILLISECOND, offset);
return cal.getTimeInMillis();
} catch (ParseException e) {
e.printStackTrace();
}
return -1;
}

附带说明一下,无论您的用户身在何处,我都建议您以 UTC 格式存储时间值。例如,如果您的应用程序同时在两个不同的时区使用,则服务器应存储相同的值。时间转换将而且应该根据他/她所在的时区在用户设备上本地完成。

关于java - Android日期,回到夏令时会不会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com