Преобразование миллисекундной строки в дату в Java

У меня есть строка x = "1086073200000". Это в основном миллисекунда, которую мне нужно преобразовать в дату.

для преобразования я использую

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

long tempo1=Long.parseLong(x);
System.out.println(tempo1);  // output is 86073200000 instead of the whole thing
long milliSeconds=1346482800000L;

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliSeconds);
System.out.println(formatter.format(calendar.getTime())); 

проблема в том , что когда я преобразую строку x в long, некоторые цифры уходят из-за ограничения на размер long.

Как сохранить всю строку.

спасибо.

6 ответов


double tempo=Double.parseDouble(z);

почему вы разбираете свой String который должен быть Long как Double?

попробуйте использовать Long.parseLong:

String x = "1086073200000"

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

long milliSeconds= Long.parseLong(x);
System.out.println(milliSeconds);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliSeconds);
System.out.println(formatter.format(calendar.getTime())); 

я попробовал этот код и он работал для меня

public static void main(String[] args) {
    String x = "1086073200000";
    long foo = Long.parseLong(x);
    System.out.println(x + "\n" + foo);

    Date date = new Date(foo);
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    System.out.println(formatter.format(date)); 
}

я использовал следующее, И это сработало для меня

Date date=new Date(milliSeconds);

Date date = новая дата (миллисекунды);


tl; dr

Instant.ofEpochMilli ( 1_346_482_800_000L );

2012-09-01T07:00:00Z

подробности

на принят ответ Тима Бендера и другой ответ энтропией оба верны. Вы анализировали входную строку как double, а не long.

java.время

кроме того, вопрос и ответы используют старые устаревшие классы даты и времени. Они теперь вытеснены java.время пакета. См.В Oracle Учебник. Большая часть java.функциональность времени была обратно портирована на Java 6 & 7 в ThreeTen-Backport и далее адаптированы к Android в ThreeTenABP.

отсчет от эпохи

java.классы времени отсчитываются от одного и того же эпохи как старые классы, первый момент 1970 в UTC. Таким образом, мы можем начать так же, с разбора ввода как long.

String input = "1086073200000";
long millis = Long.parseLong ( input );

UTC

использовать long номер, чтобы получить Instant.
(как показано в примере кода выше)

  • использовать DateTimeFormatter в:
    (a) определите свой собственный формат или
    (b) автоматически локализовать на человеческий язык и культуру пользователя СНиП.
  • переполнение стека поиска для многих других вопросов и ответов на создание форматированных строк из DateTimeFormatter.


    о java.время

    на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

    в Joda Времени, теперь режим обслуживания, советует переход к java.время классы.

    чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.

    где получить java.время занятий?

    • Java SE 8, Java SE 9, и позже
      • встроенный.
      • часть стандартного API Java со встроенной реализацией.
      • Java 9 добавляет некоторые незначительные функции и исправления.
    • Java SE 6 и Java SE 7
      • большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
    • Android

    в ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и больше.


    У меня есть следующие

    Date date = new Date(); date.setTime(Long.parseLong(milliseconds));

    где миллисекунды-строка.

    надеюсь, это поможет.