Метод Date toString () возвращает разные строки - PullRequest
1 голос
/ 25 марта 2019

Я запрашиваю данные из базы данных с помощью пружинного компонента JdbcTemplate.Возвращаемый объект содержит поле данных.Проблема, с которой я сталкиваюсь, заключается в том, что когда я печатаю консоль returnedObject.getDate().toString(), возвращается «2017-08-04», а когда я new Date().toString(), она возвращает Mon Mar 25 17:36:32 GMT 2019.Я читал, что класс java Date не содержит никакого формата и для форматирования любого Date мы используем SimpleDateFormat класс.Поэтому у меня вопрос, какой параметр в Date объекте заставляет его печатать в разных форматах и ​​как мне изменить его поведение?

Ответы [ 4 ]

1 голос
/ 25 марта 2019

когда я консольную распечатку returnObject.getDate (). ToString () это возвращает «2017-08-04», но когда я делаю новый Date (). ToString (), тогда он возвращает Mon 25 марта 17:36:32 GMT 2019

Это просто.

Код returnedObject.getDate() возвращает объект типа java.sql.Date, тогда как наиболее вероятный класс Date во втором случае - java.util.Date.

Согласно документам java из java.sql.Date, его метод toString возвращает строку в формате yyyy-mm-dd.

А в соответствии с java docs из java.util.Date его метод toString возвращает строку в формате dow mon dd hh:mm:ss zzz yyyy.

1 голос
/ 25 марта 2019

JDBCTemplate возвращает экземпляр java.sql.Date, который расширяет java.util.Date. JavaDocs этой toString() реализации объясняет используемый формат даты:

Форматирует дату в формате выхода из даты гггг-мм-дд.

В toString() реализации java.util.Date используется более длинный формат даты и времени:

Преобразует этот объект Date в строку вида: dow mon dd hh:mm:ss zzz yyyy

Тип вашего поля даты может быть Object, и вы все равно можете назначить java.sql.Date или любой подкласс для поля. Это класс времени выполнения переменной, который определяет поведение при динамической диспетчеризации методов, то есть какая реализация toString() вызывается.

Если вы хотите преобразовать подкласс в «простой» java.util.Date экземпляр, вы можете посмотреть здесь . Обратите внимание, что часть времени всегда будет опущена в SQL DATE. Если вам нужна эта информация, вы должны использовать TIMESTAMP.

0 голосов
/ 25 марта 2019

java.sql.Date расширяется java.util.Date.Вы можете получать оба вида дат в мс с 1970 года, используя getTime (), а setTime (long time) можно использовать для создания идентичных типов, так что вы можете получить строку в любом формате, который вам нравится.

Однако обратите вниманиечто старые классы даты в Java являются мусором (не потокобезопасным, не неизменным и плохо именуемым (это временные метки, а не даты).

Существуют сторонние библиотеки, которые превосходят. Посмотрите на java.util.time, которыйновый способ сделать это.

0 голосов
/ 25 марта 2019

Хотя класс Date предназначен для отражения координированного универсального времени (UTC), он может не делать этого точно, в зависимости от среды хоста виртуальной машины Java, в соответствии с документацией Java этого класса дат.Я думаю, это означает, что он просматривает формат даты вашей системы, в то время как SQL-запрос идет в формате UTC.Нет параметра даты, который меняет формат.Вы должны применить его, как вы сказали через дату formater. Посмотрите на класс DateFormater: https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html В частности, метод форматирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...