我正在用计时器显示时差。
初始时间保存到SharedReferences:01:11:59 am
然后我得到当前时间:
simpleDateFormat.format(new Date());
输出为:05:19:03 am
2的时差应为4小时左右,但计时表显示:-691.33.46
代码:
Date date1 = simpleDateFormat.parse(initialTimeOnSharedPrefs);
Date date2 = simpleDateFormat.parse(currentTime);
long millis = date2.getTime() - date1.getTime();
chronometer.setBase(SystemClock.elapsedRealtime() - millis);
chronometer.start();
我怎样才能避免负值和得到正确的时间设置到计时器?
1条答案
按热度按时间zwghvu4y1#
为了避免这样的意外,我建议您使用现代日期时间api。
输出:
检查
Duration#toString
和isoşu8601şdurations,了解有关isoşu8601格式的更多信息Duration
.使用传统api的正确方法:
输出:
一些重要注意事项:
api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。出于任何原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。从trail:date-time了解现代日期时间api。