Java或Joda中的十进制DateTime格式化器。

问题描述 投票:2回答:4

我正在写一个要求日期为十进制格式的文件。

2007-04-24T13:18:09 变成 39196.554270833331000

有谁有时间格式器可以做到这一点(十进制时间是VBOffice等使用的)?

基本代码如下。

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点。

java datetime formatting jodatime
4个回答
1
投票

你可以创建一个格式器,输出一天的小数分数。你需要使用 DateTimeFormatterBuilder 来手动建立模式。分数是用 appendFractionOfDay().


0
投票

不幸的是,你的问题不是很清楚,但我有一种直觉,你的小数时间是指一个 朱利安日期. 有一个帖子是关于 转换日期为儒略日期 在Java中。


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 闰土年 . 为了规避这个错误,计算中插入了额外的一天(2 * MILLIS_IN_DAY),但这当然会破坏虚构闰年发生之前的任何日期计算。


0
投票

有什么问题吗?getTime() 办法?

© www.soinside.com 2019 - 2024. All rights reserved.