Android - конвертировать дату в метку времени - PullRequest
0 голосов
/ 14 мая 2019

У меня есть Date объект, который я хочу преобразовать обратно в метку времени, логика заключается в том, что пользователь может ввести дату события, а затем этот ввод преобразуется в соответствующую ему метку времени и затем загружается в Firebase Firestore , Я должен использовать этот метод, чтобы сделать сортировку более простой и точной, между списком дат пользователю показывается ближайшая дата.

У меня есть другой способ (конвертировать метку времени в дату) и запустить

Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(timestamp * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", cal).toString();

Как отменить этот алгоритм для удовлетворения моих требований?

1 Ответ

2 голосов
/ 14 мая 2019

В соответствии с документацией java.util.Calendar.getTimeInMillis () он вернет текущее время в виде UTC миллисекунд с эпохи .

В соответствии с этим, вы могли бы сделать что-то как

public long dateToTimestamp(Date date) {
    Calendar cal = Calendar.getInstance(Locale.ENGLISH);
    cal.setTime(date);
    return cal.getTimeInMillis() / 1000L;

}

Я проверял, и он отлично работает.

class Main {

    public static long dateToTimestamp(Date date) {
        Calendar cal = Calendar.getInstance(Locale.ENGLISH);
        cal.setTime(date);
        return cal.getTimeInMillis() / 1000L;
    }

    public static Date timeStampToDate(long timestamp) {
        Calendar cal = Calendar.getInstance(Locale.ENGLISH);
        cal.setTimeInMillis(timestamp * 1000L);
        return cal.getTime();
    }

    public static void main(String[] args) {
        long date = 1000;

        System.out.println("Time as Date: " + timeStampToDate(date));
        System.out.println("Time in timestamp: " + dateToTimestamp(timeStampToDate(date)));
    }

}

Один тестовый пример, который проверяет, что метод действительно противоположен тому, что у вас в вопросе:

@Test
void testTimestampConversion() {

    Calendar cal = Calendar.getInstance(Locale.ENGLISH);

    // Present
    long expected = dateToTimestamp(cal.getTime());
    assertEquals(expected, dateToTimestamp(timeStampToDate(expected)));

    // Past
    long expectedPast = 1000;
    assertEquals(expectedPast, dateToTimestamp(timeStampToDate(expectedPast)));

    // Future
    Date future = cal.getTime();
    future.setYear(3000);
    long expectedFuture = dateToTimestamp(future);
    assertEquals(expectedFuture, dateToTimestamp(timeStampToDate(expectedFuture)));
}
...