Android 安卓:毫秒长-精度损失一小时
基本上,我有一个应用程序,它首先要求用户输入,然后当用户单击“提交”时,它会占用当前时间,并将其存储在SharedReferences中,代码如下: SubmitAction.javaAndroid 安卓:毫秒长-精度损失一小时,android,sharedpreferences,Android,Sharedpreferences,基本上,我有一个应用程序,它首先要求用户输入,然后当用户单击“提交”时,它会占用当前时间,并将其存储在SharedReferences中,代码如下: SubmitAction.java ConversePrefs cp = new ConversePrefs(Awake.this); Date date = new Date(System.currentTimeMillis()); cp.SetStartTime(date.getTime()); ConversePrefs.java: pu
ConversePrefs cp = new ConversePrefs(Awake.this);
Date date = new Date(System.currentTimeMillis());
cp.SetStartTime(date.getTime());
ConversePrefs.java:
public void SetStartTime(long start){
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putLong("StartTime", start);
editor.commit();
}
public long GetStartTime(){
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);
long setting = settings.getLong("StartTime", 0);
return setting;
}
完成应用程序的所有操作和功能后,用户将进入新的活动,该活动获取开始时间并使用当前时间
FinalActivity.java:
final ConversePrefs cp = new ConversePrefs(this);
final long start_time = cp.GetStartTime();
final SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");
Date date = new Date(System.currentTimeMillis());
long end_time = date.getTime();
long final_time = end_time - start_time;
String dateString = formatter.format(new Date(final_time));
dateString最后显示偏移量为1小时。
例如:
我在凌晨2:40:22点击了提交按钮
应用程序在13秒内完成了所有操作并打开了新活动。
最后,我的柜台上写着:
时间:01:00:13
因此它增加了一个小时,这可能是什么问题/原因
顺便说一句,我现在是UTC时区。不要使用日期格式化程序来格式化“经过的时间”。它不是为那个而设计的。您在这里实际格式化的是1970年1月某个日期的时间部分,您可能被时区或DST问题绊倒。为什么不把秒数打印成整数(或双精度)?如果您已经使用了Commons Lang,那么就有了。关闭1小时几乎总是意味着DST问题。@Gabeschen:不过,我想不是在这里。嗯。是的,在这个问题上,你下面的答案可能是对的。@Gabeschen:再想想,也许这也是一个时区问题。为什么它会将“00”小时打印为“1”?我可以理解它变成了“12”(如“午夜”)。但即使是时区问题,它也不应该增加额外的小时,因为它对新旧时区都使用相同的时区。我的意思是,如果旧时间是在-1时区,新时间是在+0时区,那么是的,它应该增加一个小时,但这是相同的。第一个解决方案不起作用-HH格式,它仍然偏移了一个小时。好吧,那么这真的是一个时区问题。不要在这里使用DateFormatter。因此,您建议:不要使用DateFormatter-只需执行:final_time=NewTime-OldTime;差值=最终_时间/1000;这会以秒为单位给出差异,然后用如下方式格式化:小时=差异/3600分钟=(差异/60)%60秒=差异%60?是的。也许你可以从DurationFormatUtils中复制相关的方法。使用这个方法:long final\u time=end\u time-start\u time;长时间=时间单位。毫秒。到小时(最终时间);长分钟=时间单位。毫秒。至分钟(最终时间);长秒=时间单位毫秒到秒(最终时间);