Java 使用joda格式化特定时间跨度时的奇怪之处
我很难理解这里发生了什么。。。我试图将时间跨度转换为字符串(即“2年6天4小时23秒”) 我得到的数字示例如下: 开始:1309605480723结束:1341227880000Java 使用joda格式化特定时间跨度时的奇怪之处,java,android,jodatime,Java,Android,Jodatime,我很难理解这里发生了什么。。。我试图将时间跨度转换为字符串(即“2年6天4小时23秒”) 我得到的数字示例如下: 开始:1309605480723结束:1341227880000 开始时间:2011年7月2日上午4:18:00 完:2012年7月2日上午4:18:00 span.toString:PT8783H59M59.277S 格式化程序。打印(跨度):0年,0个月,1天,23小时,59分钟,59秒 span.toString(格式化程序):0年0月1天23小时59分59秒 产生上述结果的代
开始时间:2011年7月2日上午4:18:00
完:2012年7月2日上午4:18:00
span.toString:PT8783H59M59.277S
格式化程序。打印(跨度):0年,0个月,1天,23小时,59分钟,59秒
span.toString(格式化程序):0年0月1天23小时59分59秒
产生上述结果的代码是:
Period span = new Period(mEndTime - mStartTime);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroAlways()
.appendYears().appendSuffix(" year", " years").appendSeparator(", ")
.appendMonths().appendSuffix(" month", " months").appendSeparator(", ")
.appendDays().appendSuffix(" day", " days").appendSeparator(", ")
.appendHours().appendSuffix(" hour", " hours").appendSeparator(", ")
.appendMinutes().appendSuffix(" minute", " minutes").appendSeparator(", ")
.appendSeconds().appendSuffix(" second", " seconds")
.toFormatter();
Log.d(LOGTAG, "formatter.print: " + formatter.print(span.normalizedStandard()));
Log.d(LOGTAG, "span.toString: " + span.normalizedStandard().toString(formatter));
有人能解释这些数字吗?也许我在做一些愚蠢的事情,看不见(毕竟现在是凌晨4点),但我就是不明白为什么这8783个小时不能转换成几天?
谢谢。为救援提供文档!:) org.joda.time.Period.Period(长持续时间) 使用标准字段集从给定的毫秒持续时间创建一个周期 将仅使用句点类型中的精确字段。对于标准时段类型,这仅是时间字段。因此,年、月、周和日字段将不会填充 尝试:
您得到的日志与代码应该打印的不匹配:它应该打印“formatter.print:”,并且它打印“formatter.print(span)”。你确定你正在查看正确的日志(或运行正确的代码)?复制+粘贴。。。日志和代码被裁剪为只显示解释所需的+1,但您建议使用的构造函数也使用stabdard字段集。您应该添加第三个参数:PeriodType.yearMonthDayTime(),它在我剪切和粘贴解决方案时起作用。是的,许多构造函数确实使用标准的细粒度字段,但我认为Period(long,long)将始终有效。我使用的是jodatime版本1.6.2,但使用的是jmmv。这是一种说法,因为这个构造函数的javadoc说:“使用标准字段集从给定的间隔端点创建一个周期。”这是有效的:周期跨度=新周期(mStartTime,mEndTime);这也起作用了:Period span=new Period(mStartTime、mEndTime、PeriodType.yearMonthDayTime());谢谢
Period span = new Period(mStartTime, mEndTime);