gpt4 book ai didi

java - 日历 getTimeInMillis 相差 1 小时

转载 作者:搜寻专家 更新时间:2023-11-01 08:40:02 25 4
gpt4 key购买 nike

我正在编写一个在 UI 中有一个 DatePicker 和一个 TimePicker 的应用程序。我需要获取用户设置的日期和时间并存储在服务器中。

例如用户选择“2015 年 11 月 13 日 13:00”,我的模拟器的时区设置为 GMT+8,则返回的 timeInSec 与时区无关,GMT 应该是“1447390800” ,结果却是“1447387200”,相差1小时。结束我从服务器收到的显示时间也是错误的。

为什么会这样?与 GMT 时区国家的夏令时有关,或者我在代码中做错了什么?在我的国家没有夏令时..

这是我的代码:

Calendar cal = Calendar.getInstance();
cal.set(mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth(), mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute(), 0);
// get time in seconds independent of timezone <- update on 2015/11/14: this is wrong!!
long timezoneOffset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
long timeInSec = ((cal.getTimeInMillis() + timezoneOffset)/1000);

更新

再次查看代码,发现是我的TimePicker给错了值。

最佳答案

如果你想要 UTC 时间戳,你可以直接使用 getTimeInMillis()

public long getTimeInMillis()

Returns: the current time as UTC milliseconds from the epoch.

Reference:
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getTimeInMillis()

例如,将日历日期设置为 2015 年 11 月 13 日 13:00,时区为 GMT+8:

Calendar calendar = Calendar.getInstance();
calendar.set(2015, Calendar.NOVEMBER, 13, 13, 0, 0);
int timeInSec = calendar.getTimeInMillis() / 1000;

timeInSec 的值为1447390800

编辑

这段代码的输出结果是什么?

Calendar calendar = Calendar.getInstance();
calendar.set(2015, Calendar.NOVEMBER, 13, 13, 0, 0);
int offset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
long utcTimeInMillis = calendar.getTimeInMillis() + offset;

Calendar utcCalendar = Calendar.getInstance(Locale.ENGLISH);
utcCalendar.setTimeInMillis(utcTimeInMillis);

Log.d(TAG, "Time: " + calendar.getTime());
Log.d(TAG, "TimeInMillis: " + calendar.getTimeInMillis());
Log.d(TAG, "DisplayName: " + calendar.getTimeZone().getDisplayName());
Log.d(TAG, "Offset: " + offset);
Log.d(TAG, "UTC Time: " + utcCalendar.getTime());
Log.d(TAG, "UTC TimeInMillis: " + utcTimeInMillis);

这是我得到的结果:

Time: Fri Nov 13 13:00:00 GMT+08:00 2015
TimeInMillis: 1447390800061
DisplayName: Hong Kong Standard Time
Offset: 28800000
UTC Time: Fri Nov 13 21:00:00 GMT+08:00 2015
UTC TimeInMillis: 1447419600061

关于java - 日历 getTimeInMillis 相差 1 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626318/

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