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)
我们正面临寻找时代编号的派系部分的问题
一种选择是采用“自 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
在真正涉及时区时使用...)
归档时间: |
|
查看次数: |
1101 次 |
最近记录: |