簡體   English   中英

Java 或 Joda 中的十進制日期時間格式化程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM