Я пишу приложение, которое имеет DatePicker
и TimePicker
в пользовательском интерфейсе. Мне нужно установить дату и время, установленные пользователем и сохранить на сервере.Календарь getTimeInMillis разница 1 час
Например, пользователь выбрал «13 ноября 2015 года 13:00», а часовой пояс моего эмулятора установлен как GMT + 8, возвращенный timeInSec
в GMT, независимо от часового пояса, должен быть «1447390800», но, оказывается, «1447387200», разница 1 час. В конечном итоге мое отображаемое время, полученное от сервера, также неверно.
Почему это так? Что-то связано с летней экономией в странах с часовым поясом в мире или что я сделал неправильно в коде? В моей стране нет декретных ..
Вот мой код:
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);
Update 2015/11/11 23:03 После повторной проверки через код, я нашел, что это дает мой TimePicker неправильное значение. По просьбе Маттиа MAESTRINI, вот мой код, который создает Time Picker: https://dl.dropboxusercontent.com/u/4256111/AddApptDialogFragment.java
Update 2015/11/12 7:14 Дело закрыто. Это из-за TimePicker. Pls заглядывает в комментарий для ans.
Update 2015/11/14 23:17 Omg ... Calendar.currentTimeMillis() на самом деле дает время независимую из временной зоны (т.е. UTC)! Эта ссылка (Java: Timezone why different timezone give same value in millisec) настолько вводит в заблуждение! Это SHLD быть, что у SHLD смотреть на: http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getTimeInMillis()
Так я SHLD быть просто делает это:
Calendar cal = Calendar.getInstance();
cal.set(mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth(), mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute(), 0);
long timeInSec = (cal.getTimeInMillis()/1000);
cal.getTimeInMillis() зависит от моего часового пояса. Http: // StackOverflow.com/questions/13083243/calendar-gettimeinmillis-is-timezone-depend? rq = 1 Я намеренно минус смещение по часовой пояс по этой причине. Если я храню на сервере это значение, полученное значение также неверно. – yeeen
@yeeen Я только что обновил свой ответ, какое значение вы получили с помощью этого кода? –
То же, что и мое, когда округляется до секунд. Я обнаружил, что это мой TimePicker, который дает мне неправильное время! Я выбрал 13:00, почему это происходит, когда я получаю getCurrentHour() и getCurrentMinute(), вместо этого он дает мне 4 и 0? Я пробовал другие даты и время, это всегда 9 часов раньше, чем мое выбранное время! – yeeen