2017-02-28 58 views
3

SQLite有很好的功能 - julianday。这是一种简单的方法来存储日期,比较,排序...(如果我误解 - 为什么?) 但我找不到任何方式来操纵Android API中的julianday日期。 有什么方法(除了让我自己或使用第三方库)将julianday转换为日期并返回?SQLite julianday()和Android

+1

你到底想要计算什么? –

+0

例如julianday(CURRENT_DATE)= 2457812.5。如何将它转换成java中的Date()? – McBodik

回答

1

SQLite的julianday()的唯一功能似乎非常有用的是它能够查找两个日期字符串之间的天数差异。这是可能的,因为可以在两个日期找到自Julian日历开始以来的天数,并计算它们的差异。了解自公元前4714年11月24日以来的天数本身就没那么有用,除非你当时还活着,在这种情况下,你可能是一个吸血鬼。

我们也可以发现在Java中的Android两个日期之间的天数不同,尽管它是一个比较繁琐:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd"); 
try { 
    Date date1 = sdf.parse("2017-02-21"); 
    Date date2 = sdf.parse("2017-02-28"); 

    long diffInMillis = date2.getTime() - date1.getTime(); 
    int numDays = (int)diffInMillis/1000*60*60*24; 

} catch (ParseException e) { 
    e.printStackTrace(); 
} 
0

Java使用毫秒时间标记,这是一样的Unix的时间戳,但毫秒而不是秒。

所以为Julian天数转换成一个Java毫秒值,使用strftime()并经过一个Unix时间戳:

SELECT strftime('%s', TimestampColumn) * 1000 FROM ... 

到Java毫秒值转换为儒略日数,不插入直接呼叫julianday()就可以了:

INSERT INTO ... VALUES (..., julianday(?/1000, 'unixepoch'), ...);