时间戳更改日期

时间:2015-09-18 03:30:32

标签: java android mysql date datetime

在将数据存储到数据库之前,我使用以下服务器代码从用户获取时间戳的文本表示。

    String timestampString = request.getParameter("timestamp");
    String timezoneID = request.getParameter("timezone");
    System.out.println(TAG + " newTestIdString: " + newTestIdString
              + "\n" + TAG + " timestampString: " + timestampString);

    Integer newTestId = Integer.parseInt(newTestIdString);

    try{
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        dateFormat.setTimeZone(TimeZone.getTimeZone(timezoneID));
        Date parsedDate = dateFormat.parse(timestampString);
        System.out.println(TAG + "timezone-JP: " + dateFormat.format(parsedDate));

        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println(TAG + "timezone-UTC: " +   dateFormat.format(parsedDate));

        dateFormat.format(parsedDate);
        timestamp = new java.sql.Timestamp(parsedDate.getTime());
        System.out.println(TAG + "timestamp: " + timestamp.toString());
    }catch(Exception e){
        e.printStackTrace();
    }

但是如果用户在7:29发送包含Timestamp字符串的数据,我会得到以下输出:

INFO   | jvm 1    | 2015/09/17 18:29:59 | ProcessTest  newTestIdString: 1109
INFO   | jvm 1    | 2015/09/17 18:29:59 | ProcessTest  timestampString: 2015-09-18 07:29:58
INFO   | jvm 1    | 2015/09/17 18:29:59 | ProcessTest timezone-JP: 2015-09-18 07:29:58
INFO   | jvm 1    | 2015/09/17 18:29:59 | ProcessTest timezone-UTC: 2015-09-17 10:29:58
INFO   | jvm 1    | 2015/09/17 18:29:59 | ProcessTest timestamp: 2015-09-17 18:29:58.0

为什么时间戳会改变最后一行的日期?

如何创建带有UTC日期的时间戳?

1 个答案:

答案 0 :(得分:2)

TimeStampDate没有与之相关的时区......

当您执行timestamp.toString()时,它会在 JVM的默认时区中提供日期的字符串表示。

如果您想要在特定的时区,只需format(),就像使用其他Date个对象一样。

System.out.println(TAG + "timestamp: " + dateFormat.format(timestamp));

PS:java.sql.Timestamp扩展java.util.Date