繁体   English   中英

Java 或 Joda 中的十进制日期时间格式化程序

Decimal DateTime formatter in Java or Joda

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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 点

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-2022 STACKOOM.COM