基本上我有一个应用程序首先要求用户输入,然后当用户点击提交时需要当前时间并将其存储在SharedPreferences中,并带有以下代码:
SubmitAction.java
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;
}
完成应用程序的所有操作和功能后,将用户带到新的Activity,该Activity获取开始时间并将其与当前时间一起使用。
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最终显示偏移一小时。 例如:
我点击了上午02:40:22的提交按钮 应用程序执行所有操作并在13秒内打开新活动。 我最终反驳说: 经过的时间:01:00:13
所以它增加了一个小时,问题/原因可能是什么?
如果重要的话,我在UTC时区。
答案 0 :(得分:2)
请勿使用DateFormatter格式化“已用时间”。它不是为此而做的。你在这里实际格式化的是1970年1月某个日期的时间部分,你可能被时区或DST问题绊倒了。为什么不以整数(或双精度)打印秒数?如果您已使用Commons Lang,则有DurationFormatUtils。