#java #android #django #date #calendar
#java #Android #django #Дата #Календарь
Вопрос:
У меня есть экземпляр календаря, настроенный с часовым поясом UTC, мне нужно быть UTC, потому что я должен синхронизироваться с сервером, который является UTC.
Мне нужно создать объект даты из этого календаря, и я использую Calendar.getTime().
Но когда я пытаюсь распечатать объект даты, я вижу его с другим часовым поясом (CEST вместо UTC)
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar cal = Calendar.getInstance(timeZone);
cal.setTime(timeMillisecond);
Date d = cal.getTime();
Log.d("TAG", d.toString());
Редактировать:
Когда я передаю объект даты на сервер, я получаю его с часовым поясом CEST вместо часового пояса UTC.
Комментарии:
1. У
Date
объекта нет часового пояса. Он просто представляет момент времени.Date.toString()
показывает этот момент в локальном часовом поясе системы.2. Я отредактировал вопрос.
3. К сожалению, это бесполезно. Мы понятия не имеем, как вы передаете дату на сервер, но мы видим , что вы регистрируете результат вызова
Date.toString()
— см. Мой предыдущий комментарий. Обратите внимание, что ваш код, использующийCalendar
не делает ничего полезного, хотя — вы фактически получилиDate d = new Date(timeMillisecond);
.4. Я использую retrofit для отправки его в django rest framework
5. Я ничего не знаю ни об одной из этих вещей, но в принципе, если вы вызываете
toString()
Date
объект, и это часть того, как вы взаимодействуете с сервером, вы делаете это неправильно.
Ответ №1:
Вы можете использовать sdf, установить его часовой пояс и проанализировать его соответствующим образом.
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
try {
Date dt = sdf.parse(sdf.format(Calendar.getInstance()));
} catch (ParseException e) {
e.printStackTrace();
}
Это сработало для меня.
Ответ №2:
Попробуйте приведенный ниже код, он предоставит вам дату в UTC.
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy dd,MM hh:mm:ss", Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = dateFormat.format(new Date(timeMillisecond));
Log.d("TAG", utcTime);
Он предоставит вам дату в формате гггг дд, ММ чч: мм: сс, но вы можете предоставить другой формат в соответствии с вашими потребностями.
Комментарии:
1. Вы почти наверняка не захотите использовать
hh
, если вы также не включите спецификатор am / pm.