在将数据存储到数据库之前,我使用以下服务器代码从用户获取时间戳的文本表示。
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日期的时间戳?
答案 0 :(得分:2)
TimeStamp
或Date
没有与之相关的时区......
当您执行timestamp.toString()
时,它会在 JVM的默认时区中提供日期的字符串表示。
如果您想要在特定的时区,只需format()
,就像使用其他Date
个对象一样。
System.out.println(TAG + "timestamp: " + dateFormat.format(timestamp));
PS:java.sql.Timestamp
扩展java.util.Date
。