Android:Millis长 - 精度损失一小时

时间:2014-07-16 01:43:00

标签: android sharedpreferences

基本上我有一个应用程序首先要求用户输入,然后当用户点击提交时需要当前时间并将其存储在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时区。

1 个答案:

答案 0 :(得分:2)

请勿使用DateFormatter格式化“已用时间”。它不是为此而做的。你在这里实际格式化的是1970年1月某个日期的时间部分,你可能被时区或DST问题绊倒了。为什么不以整数(或双精度)打印秒数?如果您已使用Commons Lang,则有DurationFormatUtils