[英]Decimal DateTime formatter in Java or Joda
我正在編寫一個要求日期為十進制格式的文件:
2007-04-24T13:18:09
變成39196.554270833331000
有沒有人有時間格式化程序可以做到這一點(十進制時間是 VB/Office 等使用的)?
基本代碼如下:
final DateTime date = new DateTime(2007, 04, 24, 13, 18, 9, 0, DateTimeZone.UTC);
double decimalTime = (double) date.plusYears(70).plusDays(1).getMillis() / (Days.ONE.toStandardDuration().getMillis())); //=39196.554270833331000.
對於上面的例子。
(我開始使用可以執行此操作的 DateTimePrinter,但現在太難了(我沒有鏈接 joda 源,因此我無法輕松獲得想法))。
注意:十進制時間是自 1900 年以來的天數 - . 代表部分天數。 2.6666666 將是 1900 年 1 月 2 日下午 4 點
您可以創建一個格式化程序來輸出當天的小數部分。 您需要使用DateTimeFormatterBuilder
手動構建模式。 使用appendFractionOfDay()添加分數。
您可以使用日歷類來執行此操作:
final long MILLIS_IN_DAY = 1000L * 60L * 60L * 24L;
final Calendar startOfTime = Calendar.getInstance();
startOfTime.setTimeZone(TimeZone.getTimeZone("UTC"));
startOfTime.clear();
startOfTime.set(1900, 0, 1, 0, 0, 0);
final Calendar myDate = Calendar.getInstance();
myDate.setTimeZone(TimeZone.getTimeZone("UTC"));
myDate.clear();
myDate.set(2007, 3, 24, 13, 18, 9); // 2007-04-24T13:18:09
final long diff = myDate.getTimeInMillis() - startOfTime.getTimeInMillis() + (2 * MILLIS_IN_DAY);
final double decimalTime = (double) diff / (double) MILLS_IN_DAY;
System.out.println(decimalTime); // 39196.55427083333
需要注意的是:此代碼僅在 1900 年 2 月 28 日之后有效。Excel錯誤地將 1900 計算為閏年,當然不是。 為了規避該錯誤,計算插入了額外的一天( 2 * MILLIS_IN_DAY
),但這當然會在假想的閏年發生之前破壞任何日期計算。
getTime()方法有什么問題?
不幸的是,你的問題不是很清楚,但我有一種預感,十進制時間你的意思是儒略日期。 有一篇關於在 Java中將日期轉換為儒略日期的帖子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.