Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 时间戳更改日期_Java_Android_Mysql_Date_Datetime - Fatal编程技术网

Java 时间戳更改日期

Java 时间戳更改日期,java,android,mysql,date,datetime,Java,Android,Mysql,Date,Datetime,在将时间戳存储在数据库中之前,我使用以下服务器代码从用户处获取时间戳的文本表示 String timestampString = request.getParameter("timestamp"); String timezoneID = request.getParameter("timezone"); System.out.println(TAG + " newTestIdString: " + newTestIdString + "\n"

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

    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发送包含时间戳字符串的数据,我将得到以下输出:

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日期创建时间戳?

时间戳或日期没有任何时区关联

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

如果您不想在特定时区使用它,只需像处理其他
Date
对象一样
format()
即可

System.out.println(TAG + "timestamp: " + dateFormat.format(timestamp));
PS:
java.sql.Timestamp
扩展了
java.util.Date

如果您指的是主机操作系统时区,那么从技术上讲,它不是您的“系统时区”。旧类(java.util.Date、java.sql.Date、java.sql.Timestamp)上的
toString
方法在生成日期时间值的字符串表示形式时应用JVM的当前默认时区。当前默认时区可以在运行时随时由运行在同一JVM中的任何应用程序的任何代码的任何线程更改。