Java-日期时区转换

时间:2019-06-10 14:09:11

标签: java date simpledateformat

我正在尝试将JSON对象转换为日期并将其写入数据库。但是,将日期转换为EST的代码不起作用。将日期转换为EST的最佳方法是什么?

JSON条目

"custom_date_1": "2019-05-19","

转化代码

int id;
Date trainingDate;

SimpleDateFormat format = new SimpleDateFormat("DD-MM-YY", Locale.US);
TimeZone tz = TimeZone.getTimeZone("EST");
format.setTimeZone(tz);

logger.info("custom_date_1: {}", object.getString("custom_date_1"));

 try {
      id= Integer.parseInt(object.getString("employee_number"));
      trainingDate = format.parse(object.getString("custom_date_1"));

      //Still says GMT
      logger.info("trainingDate: {}", trainingDate);

       map.put("employee_number", id);
       map.put("custom_date_1", trainingDate);
   } catch (ParseException e) {
       e.printStackTrace();
   }

日志声明

2019-06-10 14:00:00,226 INFO custom_date_1: 2019-05-19
2019-06-10 14:00:00,226 INFO trainingDate: Sun Dec 30 05:00:00 GMT 2018

3 个答案:

答案 0 :(得分:2)

tl; dr

myPreparedStatement.setObject(       // In JDBC 4.2 and later, exchange *java.time* objects with your database. Use `PreparedStatement` to avoid SQL Injection attacks. 
    … ,                              // Specify which `?` placeholder to replace in your SQL statement. 
    LocalDate.parse( "2019-05-19" )  // Parse your standard ISO 8601 formatted input string as a date-only value represented in the `LocalDate` class. 
) 

详细信息

  

“ custom_date_1”:“ 2019-05-19”,

您的输入字符串为标准ISO 8601格式。解析/生成字符串时, java.time 类中默认使用这些标准格式。因此,无需指定格式化模式。

LocalDate ld = LocalDate.parse( "2019-05-19" ) ;

此处的时区无关紧要。因此,您的问题相当令人困惑。

  

我正在尝试将JSON对象转换为日期并将其写入数据库。

JDBC 4.2开始,我们可以与数据库交换 java.time 对象。数据库中用于此仅日期值的列(无日期且无时区)应为类似于标准SQL类型DATE的类型。

myPreparedStatement.setObject( … , ld ) ;

检索。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

答案 1 :(得分:0)

从Java 8开始,您应该使用LocalDateLocalDateTime,以便您可以使用

进行时区转换

LocalDateTime.atZone(ZoneId zoneId)

例如

LocalDateTime date = LocalDateTime.parse("2019-06-10T12:00:00"); 
ZonedDateTime date2 = date.atZone(ZoneId.systemDefault());

答案 2 :(得分:0)

请使用以下日期格式

SimpleDateFormat格式=新的SimpleDateFormat(“ yyyy-MM-dd”,Locale.US);

 Date trainingDate;

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
        TimeZone tz = TimeZone.getTimeZone("EST");
        format.setTimeZone(tz);
        String strDate = "2019-05-19";

        try {
            trainingDate = format.parse(strDate);

           System.out.println(trainingDate);

        } catch (ParseException  e) {
            e.printStackTrace();
        }