Отримання мітки часу unix із Date ()


85

Я можу перетворити мітку часу unix на Date()об'єкт, ввівши longзначення в Date()конструктор. Наприклад, я міг би це мати як new Date(1318762128031).

Але після цього, як я можу повернути мітку часу unix з Date()об’єкта?


Ви все ще можете отримати довге значення вашого об'єкта Date, чи не так?
Кент,

@xEnOn: ви не перетворюєте мітку часу Unix у дату за допомогою конструктора long. Мітка часу Unix, як я коментував відповідь кролика, виражається в секундах, а не в мілісекундах. Тут: en.wikipedia.org/wiki/Unix_time і тут: unixtimestamp.com/index.php Секунди. Не мілісекунди.
TacticalCoder

Відповіді:


93

getTime()отримує мілісекунди, починаючи з 1 січня 1970 року, переданого конструктору. Отримати час Unix (те саме, але в секундах) не повинно бути надто складно .


1
Дякую. Я продовжував згадувати це неправильно як статичну функцію Date.getTime (new Date ()), яка не працювала, і думала, що відбувається.
Carven

47
@jackrabbit: насправді getTime () не повертає мітку часу Unix, а "мітку часу Unix * 1000". Узгоджене визначення щодо часової позначки Unix полягає в тому, що вона дає час від епохи в секунду, а не в мілісекундах; )
TacticalCoder

3
@TacticalCoder jackrabbit є більш точним: він повертає мітку часу unix за мілісекунди. Так, unix-timestamp погоджується бути в секундах - але якщо ваша відповідь буде правдивою, ( getTime() = unixTimestamp * 1000), getTime()завжди повертає три Нулі в кінці, але насправді може повертати що завгодно, починаючи з закінчуючи 000до 999, що означає, що він має вищий точність завдяки мілісекундам і не просто "* 1000". Значення: Порівняння реального unixTimestamp * 1000 з getTime()результатом вдалося б лише в ~ 0,1% випадків.
доноза

Для запису функція повертає мілісекунди в зоні GMT-0 (у Грінвічі), тому ви можете бути впевнені в перетворенні цього в різні області.
Onat Korucu,

50

Щоб отримати timestampз Date(), потрібно розділити getTime()на 1000, тобто:

Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691

або просто:

long unixTime = System.currentTimeMillis() / 1000L;

1
Або ще new Date().getTime()
коротше

25
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;
    }
}

6

У Java 8 зручно використовувати нову бібліотеку дати та getEpochSecondметод, щоб отримати позначку часу (це в секунді)

Instant.now().getEpochSecond();


Але представлений код повертає кількість секунд на цей момент
Мілан Велебіт

Правда, @MilanVelebit. Вам доведеться замінити бажане Instantзамість Instant.now(). Або yourDesiredJavaUtilDate.toInstant()якщо ви отримали старомодну Dateверсію зі застарілого API.
Оле В. В.

0

Я не знаю, чи хочете ви цього досягти в js або java, в js найпростіший спосіб отримати часову мітку unix (це час у секундах з 1/1/1970) такий:

var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date

-1

Використовуйте SimpleDateFormatклас. Погляньте на його javadoc: він пояснює, як користуватися перемикачами формату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.