Java - преобразование даты и часового пояса - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь преобразовать объект 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 ]

2 голосов
/ 10 июня 2019

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 ) ;
0 голосов
/ 10 июня 2019

Пожалуйста, используйте формат даты, как показано ниже

Формат SimpleDateFormat = новый SimpleDateFormat ("гггг-ММ-дд", 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();
        }
0 голосов
/ 10 июня 2019

Начиная с Java 8, вы должны использовать LocalDate и LocalDateTime, поэтому вы можете выполнять преобразование часового пояса, используя

LocalDateTime.atZone (ZoneId zoneId)

Например

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