Преобразование DateTimeFormat в Java! - PullRequest
1 голос
/ 14 апреля 2011

Мне просто нужна небольшая помощь относительно формата DateTime в java. Я пишу простое приложение для чата на основе Yahoo Messenger, в котором я буду читать пакет Yahoo Messenger и отображать сообщения чата. Теперь я хочу отобразить время от данного заголовка. В конкретной статье говорится, что "отметка времени" будет 0x477BBA61 (десятичное число 1199290977), что означает "Ср, 2 января 2008 16:22:57 GMT ". Я пытаюсь показать, как эта десятичная дробь преобразуется в эту конкретную дату. Я пытался написать простое Java-приложение для преобразования этого и дать ему другое время.

  public static void main(String[] arg)
        {
             Calendar  obj = Calendar.getInstance();
          obj.setTimeZone(TimeZone.getTimeZone("GMT"));
            obj.setTimeInMillis(1199290977l);
          System.out.println( obj.get(Calendar.HOUR)+":"+obj.get(Calendar.MINUTE));
        }

output:9:8

Кто-нибудь может мне помочь с этим?

Ответы [ 4 ]

4 голосов
/ 14 апреля 2011

Ваше значение 1199290977L неверно. Он измеряется в секундах со времени эпохи Unix (полночь 1 января 1970 года по Гринвичу) - вам нужно умножить его на 1000, чтобы получить миллисекунды со времени эпохи.

Вы также используете Calendar.HOUR, который является 12-часовыми часами вместо Calendar.HOUR_OF_DAY, который является 24-часовыми часами. Этот код:

Calendar  obj = Calendar.getInstance();
obj.setTimeZone(TimeZone.getTimeZone("GMT"));
obj.setTimeInMillis(1199290977000L);
System.out.println(obj.get(Calendar.HOUR_OF_DAY) + ":" + 
                   obj.get(Calendar.MINUTE));

... печатает 16: 22.

Однако вы должны определенно использовать класс java.text.DateTimeFormat вместо того, чтобы делать это самостоятельно - или, в идеале, использовать Joda Time вместо этого.

0 голосов
/ 14 апреля 2011

Часовой пояс, вероятно, в секундах;попытайтесь умножить значение на 1000, чтобы получить миллисекунды, которые Calendar ожидает.

0 голосов
/ 14 апреля 2011

Имхо, чтобы продолжить, вам нужно знать:

whether or not that number is milliseconds or not
what is the starting point (in java is  January 1, 1970, 00:00:00 GMT)
0 голосов
/ 14 апреля 2011

Вам нужно использовать SimpleDateFormat - посмотрите документацию, это довольно легко понять, плюс в ней много примеров (поэтому вам не нужно искать «учебник по формату даты») или что-то в этом роде:))

РЕДАКТИРОВАТЬ: Упс, я пропустил ту часть, где вы проходите время в секундах, а не в миллисекундах, а время результата неправильное, я неверно истолковал ваш вопрос и подумал, что вы хотите просто разобрать время, ответ Джона лучше :)

...