Calendar.getTime() для объекта даты

#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.