Я могу преобразовать временную метку unix в Date()объект, поместив longзначение в Date()конструктор. Например: я мог бы иметь это как new Date(1318762128031).
Но после этого, как я могу вернуть метку времени unix от Date()объекта?
вы все еще можете получить длинное значение вашего объекта Date, не так ли?
Кент
@xEnOn: вы не конвертируете временную метку Unix в дату с помощью длинного конструктора. Временная метка Unix, как я прокомментировал ответ jackrabbit, выражается в секундах, а не миллисекундах. Здесь: en.wikipedia.org/wiki/Unix_time и здесь: unixtimestamp.com/index.php Секунды. Не миллисекунды.
getTime()извлекает миллисекунды с 1 января 1970 г. по Гринвичу, переданные конструктору. Не должно быть слишком сложно получить из этого время Unix (то же самое, но в секундах).
Благодарю. Я все время вспоминал об этом как о статической функции Date.getTime (new Date ()), которая не работала, и думал, что происходит.
Carven
47
@jackrabbit: на самом деле getTime () возвращает не временную метку Unix, а « временную метку Unix * 1000». Согласованное определение метки времени Unix состоит в том, что она дает время с начала эпохи в секундах, а не в миллисекундах; )
TacticalCoder
3
@TacticalCoder jackrabbit более точен: он возвращает временную метку unix в миллисекундах. Да, временная метка unix согласована в секундах, но если ваш ответ будет правдой, ( getTime() = unixTimestamp * 1000) getTime()всегда будет возвращать три нуля в конце, но на самом деле может возвращать все, что угодно, начиная с конца 000на 999, что означает, что он имеет более высокий точность из-за миллисекунд, а не просто "* 1000". Значение: сравнение реального unixTimestamp * 1000 с getTime()результатом будет успешным только в ~ 0,1% случаев.
узнал
Для записи функция возвращает миллисекунды в области GMT-0 (по Гринвичу), поэтому вы можете быть уверены в преобразовании этого значения в разные области.
Онат Коруджу
50
Чтобы получить timestampот Date(), вам нужно разделить getTime()на 1000, то есть:
Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691
или просто:
long unixTime = System.currentTimeMillis() / 1000L;
Но представленный код возвращает количество секунд для этого момента
Милан Велебит
Правда, @MilanVelebit. Вам придется подставить Instantвместо Instant.now(). Или, yourDesiredJavaUtilDate.toInstant()если вы получили устаревший Dateиз устаревшего API.
Ole VV
0
Я не знаю, хотите ли вы добиться этого в js или java, в js самый простой способ получить временную метку unix (это время в секундах с 01.01.1970), это выглядит следующим образом:
var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date
Ответы:
getTime()
извлекает миллисекунды с 1 января 1970 г. по Гринвичу, переданные конструктору. Не должно быть слишком сложно получить из этого время Unix (то же самое, но в секундах).источник
getTime() = unixTimestamp * 1000
)getTime()
всегда будет возвращать три нуля в конце, но на самом деле может возвращать все, что угодно, начиная с конца000
на999
, что означает, что он имеет более высокий точность из-за миллисекунд, а не просто "* 1000". Значение: сравнение реального unixTimestamp * 1000 сgetTime()
результатом будет успешным только в ~ 0,1% случаев.Чтобы получить
timestamp
отDate()
, вам нужно разделитьgetTime()
на1000
, то есть:Date currentDate = new Date(); currentDate.getTime() / 1000; // 1397132691
или просто:
long unixTime = System.currentTimeMillis() / 1000L;
источник
new Date().getTime()
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.TimeZone; public class Timeconversion { private DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); //Specify your locale public long timeConversion(String time) { long unixTime = 0; dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); //Specify your timezone try { unixTime = dateFormat.parse(time).getTime(); unixTime = unixTime / 1000; } catch (ParseException e) { e.printStackTrace(); } return unixTime; } }
источник
В java 8 удобно использовать новую библиотеку даты и
getEpochSecond
метод для получения метки времени (она находится в секундах)Instant.now().getEpochSecond();
источник
Instant
вместоInstant.now()
. Или,yourDesiredJavaUtilDate.toInstant()
если вы получили устаревшийDate
из устаревшего API.Я не знаю, хотите ли вы добиться этого в js или java, в js самый простой способ получить временную метку unix (это время в секундах с 01.01.1970), это выглядит следующим образом:
var myDate = new Date(); console.log(+myDate); // +myDateObject give you the unix from that date
источник
Используйте
SimpleDateFormat
класс. Взгляните на его javadoc: он объясняет, как использовать переключатели формата.источник