我有一个Date
对象,我想将其转换回时间戳,其背后的逻辑是用户可以输入事件日期,然后将该输入转换为对应的时间戳,然后上传至{ {1}}。
我必须使用这种方法来使排序更容易,更准确,在日期列表之间,最接近的日期会显示给用户。
我有另一种方法(将时间戳转换为日期)启动并运行
Firebase Firestore
如何逆转该算法以满足我的要求?
答案 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)));
}