我正在尝试从date
数据库中检索sqlite
并在文本视图中显示它。尽管使用 TimeZone.getDefault(),时间仍然显示为GMT时间,而不是当地时间。
以下是我尝试将日期转换为当地时间的方法:
public String formatDate(String stringDate) {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
try {
Date date = sdf.parse(stringDate);
TimeZone tz = TimeZone.getDefault();
sdf.setTimeZone(tz);
Log.v("formatDate", "TimeZone " + tz.getDisplayName(false, TimeZone.SHORT) + " Timezon id :: " + tz.getID());
return sdf.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return stringDate;
}
正如您所看到的,我想知道时区是否实际上是本地时间,并为此添加了一个日志语句。以下是日志语句的输出:
02-25 15:15:55.422 29855-29855/com.example.ishita.assigntasks V/formatDate: TimeZone GMT+05:30 Timezon id :: Asia/Calcutta
以下是我呼叫formatDate()
的行:
viewHolder.timeStamp.setText(formatDate(cursor.getString(cursor.getColumnIndex(TasksContract.MessageEntry.COL_AT))));
请指出我出错的地方以及如何在设备使用的时区显示日期/时间。
答案 0 :(得分:1)
我认为您没有转换任何内容,因为SimpleDateFormat
默认使用默认时区,因此您正在使用相同的时区解析和格式化日期。如果在解析日期之前将时区设置为UTC 会发生什么情况(然后在格式化之前又恢复为默认值)? :
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
// convert from UTC
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
try {