2

日付を 10 進形式にする必要があるファイルを作成しています。

2007-04-24T13:18:09になる39196.554270833331000

これを行う時間フォーマッタを持っている人はいますか (10 進時間は 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 ソースがリンクされていないため、簡単にアイデアを得ることができません))。

注: 10 進数の時間は、1900 年からの日数です。部分的な日を表します。2.6666666 は、1900 年 1 月 2 日の午後 4 時になります。

4

4 に答える 4

1

日の小数を出力するフォーマッターを作成できます。DateTimeFormatterBuilderパターンを手動で構築するには、を使用する必要があります。分数はappendFractionOfDay()を使用して追加されます。

于 2012-05-04T16:56:00.067 に答える
0

残念ながら、あなたの質問はあまり明確ではありませんが、10 進数でユリウス日を意味するという予感があります。Java で日付をユリウス日付に変換することに関する投稿があります。

于 2009-04-09T23:38:08.030 に答える
0

これは、カレンダー クラスを使用して行うことができます。

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) が挿入されますが、これはもちろん、架空の閏年が発生する前の日付計算を破損します。

于 2009-09-10T11:32:49.773 に答える
0

getTime()メソッドの何が問題になっていますか?

于 2008-11-16T07:26:10.687 に答える