我的SimpleDateFormat
时区问题。这是我的代码:
TextView date_time = (TextView) view.findViewById(R.id.date_time);
SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
Date date = null;
try {
date = df.parse(workout.getDate().toString());
System.err.println("position: " + position + " workout: " + workout.getDate().toString());
System.err.println("position: " + position + " date: " + date);
} catch (ParseException e) {
e.printStackTrace();
}
df = new SimpleDateFormat("EEEE, MMMMM dd", Locale.US);
date_time.setText(df.format(date));
请注意此输出:
position: 0 workout: Mon Aug 19 00:00:00 MDT 2013
position: 0 date: Sun Aug 18 23:00:00 MDT 2013
你是否看到字符串如何开始(正确),日期是8月19日(午夜)。但是在格式化器完成其工作之后,我提前1小时出来。我假设这是一些时区操作,但我不知道如何纠正它。我为'Z'尝试了一些不同的值(包括'Z','ZZZ','ZZZZ'和'ZZZZZ'),但都给出了相同的结果。我认为这是一个时区问题,但在两种情况下都显示'MDT',所以可能没有。
如何阻止这一小时的转变?谢谢!
编辑:非常糟糕的解决方案,但它确实有效:
try {
date = df.parse(workout.getDate().toString());
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, 1);
date = cal.getTime();
} catch (ParseException e) {
e.printStackTrace();
}