Android-将日期转换为时间戳

时间:2019-05-14 12:41:15

标签: java android sorting date timestamp

我有一个Date对象,我想将其转换回时间戳,其背后的逻辑是用户可以输入事件日期,然后将该输入转换为对应的时间戳,然后上传至{ {1}}。 我必须使用这种方法来使排序更容易,更准确,在日期列表之间,最接近的日期会显示给用户。

我有另一种方法(将时间戳转换为日期)启动并运行

Firebase Firestore

如何逆转该算法以满足我的要求?

1 个答案:

答案 0 :(得分:2)

根据 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)));
}