Я не совсем уверен, что вы имеете в виду под «текущими миллисекундами», но я предполагаю, что это число миллисекунд со времени «эпохи», а именно полуночи, 1 января 1970 года по Гринвичу.
Если вы хотите узнать количество миллисекунд с начала эпохи , то используйте, System.currentTimeMillis()
как указал Анубиан Нуб . Если это так, то нет никаких причин использовать какой-либо из новых API java.time для этого.
Однако, может быть, у вас уже есть LocalDateTime
или похожий объект откуда-то, и вы хотите преобразовать его в миллисекунды с той эпохи. Это невозможно сделать напрямую, поскольку LocalDateTime
семейство объектов не имеет представления о том, в каком часовом поясе они находятся. Таким образом, необходимо предоставить информацию о часовом поясе, чтобы найти время относительно эпохи, которая находится в UTC.
Предположим, у вас есть LocalDateTime
такие:
LocalDateTime ldt = LocalDateTime.of(2014, 5, 29, 18, 41, 16);
Вам необходимо применить информацию о часовом поясе, давая ZonedDateTime
. Я в том же часовом поясе, что и Лос-Анджелес, поэтому я бы сделал что-то вроде этого:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));
Конечно, это делает предположения о часовом поясе. И есть крайние случаи, которые могут произойти, например, если местное время называется временем около перехода на летнее время (летнее время). Давайте отложим это, но вы должны знать, что такие случаи существуют.
В любом случае, если вы можете получить действительное значение ZonedDateTime
, вы можете преобразовать его в количество миллисекунд с начала эпохи, например так:
long millis = zdt.toInstant().toEpochMilli();
System.currentTimeMillis()
?