Android:日期未显示为本地时间

时间:2016-02-25 09:49:50

标签: android sqlite datetime

我正在尝试从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))));

请指出我出错的地方以及如何在设备使用的时区显示日期/时间。

1 个答案:

答案 0 :(得分:1)

我认为您没有转换任何内容,因为SimpleDateFormat默认使用默认时区,因此您正在使用相同的时区解析和格式化日期。如果在解析日期之前将时区设置为UTC 会发生什么情况(然后在格式化之前又恢复为默认值)? :

    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");

    // convert from UTC
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

    try {