0

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

对于电子表格时代

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());
}

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

4

1 回答 1

5

一种选择是采用“自 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在真正涉及时区时使用...)

于 2016-06-24T14:35:23.020 回答