Google 电子表格的 Java 纪元日期

Gau*_*ara 0 java spreadsheet epoch google-spreadsheet-api google-sheets-api

我试图在 Google 电子表格上添加日期。为了添加日期,我们在纪元中转换了日期。

对于电子表格时代

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

我们使用 Joda 时间 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());
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 5

一种选择是采用“自 Unix 纪元以来的毫秒数”值(例如 with 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);
}
Run Code Online (Sandbox Code Playgroud)

Joda Time 无需介入此案。(当您确实想使用 Joda Time 时,我强烈建议避免使用这些Mutable*类型。并且仅DateTime在真正涉及时区时使用...)