如何将此格式“1394039043000”的SQL TimeStamp转换为String

时间:2014-03-12 09:09:39

标签: android timestamp simpledateformat

我使用的是以下方法,但转换后的时间戳有一个小时的差异

public static String getServerFormattedDate(String dateStr) {


    Timestamp ts = new Timestamp(Long.valueOf(dateStr)); // input date in
                                                                    // Timestamp
                                                                    // format

            SimpleDateFormat dateFormat = new SimpleDateFormat(
                    "yyyy-MM-dd HH:mm:ss");

            Calendar cal = Calendar.getInstance();
            cal.setTime(ts);
            cal.add(Calendar.HOUR, +7); // Time different between UTC and PDT is +7
                                        // hours
            String convertedCal = dateFormat.format(cal.getTime()); // This String
                                                                    // is converted
                                                                    // datetime
            /* Now convert String formatted DateTime to Timestamp */

            return convertedCal;
        }

1 个答案:

答案 0 :(得分:2)

不要自己在时间戳上做时区数学计算。相反,请将其保留为UTC并在DateFormat上设置时区。例如:

SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("PDT"));
Date date = new Date(Long.valueOf(dateStr));
String convertedCal = dateFormat.format(date);

默认情况下,SimpleDateFormat使用适合当前默认语言区域的时区设置,可以解释您所看到的1小时差异。