java.util.Date
, java.util.Timetamp
были, кажется, вызывает большой беспорядок для многих. В StackOverflow существует столько вопросов, К сожалению, моим вопросом является скрученный бит.
Существует 2 API JDBC. Как они должны работать? Была ли среди RDBMS’es какая-либо непротиворечивость?
ResultSet.getTimestamp("dateColumn")
ResultSet.getTimestamp("dateColumn", Calendar.getInstance(tz))
Если у кого-то есть знание в Sybase, Вы могли бы обменяться своим опытом?
Во-первых, вы путаете java.util
с java.sql
. При использовании PreparedStatement # setDate ()
и ResultSet # getDate ()
вам понадобится java.sql.Date
. Аналогично, при использовании PreparedStatement # setTimestamp ()
и ResultSet # getTimestamp ()
вам понадобится java.sql.Timestamp
.
Во-вторых, важно понимать, что java.sql.Date
представляет собой только дату (год, месяц, день) и ничего меньше или больше. Это должно быть сопоставлено с типом поля SQL DATE
. java.sql.Timestamp
представляет метку времени (год, месяц, день, час, минута, секунда, миллисекунда), точно так же, как java.util.Date
и java.util.Calendar
делает. Это должно быть сопоставлено с типом поля SQL TIMESTAMP
или DATETIME
.
Что касается часовых поясов, они вам нужны, когда база данных не хранит информацию о часовых поясах (таким образом, все временные метки сохраняются в формате UTC (GMT)). Затем вы можете передать Calendar
, в котором содержится информация о текущем часовом поясе, чтобы драйвер JDBC мог настроить метку времени UTC на метку времени, соответствующую часовому поясу. Если это, например, GMT + 1, то драйвер JDBC добавит один час к метке времени перед возвратом.