Время Java с эпохи
В Java, как я могу распечатать время с момента, заданного в секундах и наносекундах в следующем формате:
java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Мой ввод:
long mnSeconds;
long mnNanoseconds;
В том случае, когда общая сумма этих двух составляет истекшее время с эпохи 1970-01-01 00:00:00.0
.
Ответы
Ответ 1
Вы можете сделать это
public static String format(long mnSeconds, long mnNanoseconds) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
return sdf.format(new Date(mnSeconds*1000))
+ String.format("%09d", mnNanoseconds);
}
например.
2012-08-08 19:52:21.123456789
если вам действительно не нужно больше миллисекунд, которые вы можете сделать
public static String format(long mnSeconds, long mnNanoseconds) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return sdf.format(new Date(mnSeconds*1000 + mnNanoseconds/1000000));
}
Ответ 2
Используйте это и разделите на 1000
long epoch = System.currentTimeMillis();
System.out.println("Epoch : " + (epoch / 1000));
Ответ 3
ТЛ; др
Instant // Represent a moment in UTC.
.ofEpochSecond( mnSeconds ) // Determine a moment from a count of whole seconds since the Unix epoch of the first moment of 1970 in UTC (1970-01-01T00:00Z).
.plusNanos( mnNanoseconds ) // Add on a fractional second as a count of nanoseconds. Returns another 'Instant' object, per Immutable Objects pattern.
.toString() // Generate text representing this 'Instant' object in standard ISO 8601 format.
.replace( "T" , " " ) // Replace the 'T' in the middle with a SPACE.
.replace "Z" , "" ) // Remove the 'Z' on the end (indicating UTC).
java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date
, .Calendar
, java.text.SimpleDateFormat
, java.sql.Date
, и многое другое. Команда Joda-Time также советует перейти на java.time.
Instant
Класс Instant
представляет момент на временной шкале в UTC с разрешением до наносекунд.
long mnSeconds = … ;
long mnNanoseconds = … ;
Instant instant = Instant.ofEpochSecond( mnSeconds ).plusNanos( mnNanoseconds );
Или передать оба номера в of
, как два аргумента. Другой синтаксис, тот же результат.
Instant instant = Instant.ofEpochSecond( mnSeconds , mnNanoseconds );
Чтобы получить строку, представляющую это значение даты и времени, вызовите Instant::toString
.
String output = instant.toString();
Вы получите значение, например 2011-12-03T10:15:30.987654321Z
, стандартный формат ISO 8601. Замените T
пробелом, если хотите. Для других форматов выполните поиск, чтобы узнать о DateTimeFormatter
.
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.
Чтобы узнать больше, см. Учебник по Oracle. И поиск для многих примеров и объяснений. Спецификация JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Ответ 4
java.util.Date
класс имеет конструктор, который принимает эпоху milliSeconds.
Отметьте java doc и попытайтесь использовать его.
Ответ 5
Это немного зависит от значений mnSeconds и mnNanoseconds, но все, что вам нужно сделать с форматом, подобным этому (с миллисекундной точностью), заключается в создании java.util.Date. Если mnNanoseconds - это количество наносекунд поверх ваших mnSeconds, я бы предположил, что это что-то вроде
Date d = new Date(mnSeconds*1000+mnNanosecods/1000000)
Затем это нужно форматировать его с помощью форматирования перед его печатью.
Ответ 6
Вы можете использовать
new java.util.Date(mnSeconds);
а затем SimpleDateFormat для форматирования вывода.
Наносекунды не поддерживаются датой. Вам нужно вручную добавить Nanoseconds или использовать некоторую фреймворк (есть ли он?).