Google SpreadSheet的Java纪元日期

时间:2016-06-24 14:30:26

标签: java spreadsheet google-spreadsheet-api epoch google-sheets-api

我尝试在Google电子表格中添加日期。要添加日期,我们在epoch中有转换日期。

For Spreadsheet epoch

Google表格使用电子表格中常用的纪元日期形式。值的整数部分(小数点左边)计算自1899年12月30日以来的天数。小数部分(小数点右侧)将时间计算为一天的一小部分。例如,1900年1月1日中午将是2.5,2,因为它是在1899年12月30日之后的两天,而.5因为中午是半天。 1900年2月1日下午3点将是33.625。

我们使用Joda time API进行计算。(我们的JDK版本1.7)。

对于整数,我们使用以下代码。

public static double getEpochDate(Date inputDate)
{

    MutableDateTime epoch = new MutableDateTime();
    epoch.setTime(0, 0, 0, 0);
    epoch.setDate(1899,12,30); //Set to Epoch time
    System.out.println(epoch);
    DateTime now = new DateTime(inputDate);
    Days days = Days.daysBetween(epoch, now);


    return Double.valueOf(days.getDays());
}

我们正面临着找到时代号的派系部分的问题

1 个答案:

答案 0 :(得分:3)

一种选择是采用“自Unix纪元以来的毫秒”值(例如使用Date.getTime()),将其偏移以获得“自Sheets纪元以来的毫秒数”,然后执行24小时的浮点除法。像这样:

// Precomputed difference between the Unix epoch and the Sheets epoch.
private static final long SHEETS_EPOCH_DIFFERENCE = -2209161600000L;

public static double getEpochDate(Date date)
{
    long millisSinceUnixEpoch = date.getTime();
    long millisSinceSheetsEpoch = millisSinceUnixEpoch - SHEETS_EPOCH_DIFFERENCE;
    return millisSinceSheetsEpoch / (double) TimeUnit.DAYS.toMillis(1);
}

Joda Time无需参与此案。 (当你想要使用Joda Time时,我强烈建议避免使用Mutable*类型。只有在真正涉及时区时才使用DateTime ...)