Преобразование миллисекундной строки в дату в 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));
}
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
использовать переполнение стека поиска для многих других вопросов и ответов на создание форматированных строк из на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как в Joda Времени, теперь режим обслуживания, советует переход к java.время классы. чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310. где получить java.время занятий? в ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как long
номер, чтобы получить Instant
.
(как показано в примере кода выше)
DateTimeFormatter
в:
(a) определите свой собственный формат или
(b) автоматически локализовать на человеческий язык и культуру пользователя СНиП.DateTimeFormatter
.
о java.время
java.util.Date
, Calendar
, & SimpleDateFormat
.
Interval
, YearWeek
, YearQuarter
и больше.
У меня есть следующие
Date date = new Date();
date.setTime(Long.parseLong(milliseconds));
где миллисекунды-строка.
надеюсь, это поможет.