所以我正在使用 java、hibernate 和 mysql (spring mvc) 开始一个新项目。
在数据库级别,我应该使用什么列类型?
在 java 级别,我相信我应该使用 Joda 时间。
我的用户表将存储他们的时间偏移量,然后我将使用数据库中的 UTC 值在 UI 级别对其进行转换/格式化。
使用hibernate,我真的需要那个joda time hibernate插件还是添加joda time就足够了?
有人能告诉我我需要什么方法,或者一篇用源代码讨论事情的文章吗?
我认为您可以将数据库中的列定义为TIMESTAMPTimeStamp
并使用对象在 Hibernate 中映射。
在 Java 端使用SimpleDateFormat
获取日期时间字符串,UTC
如下所示:
DateFormat formatter = new SimpleDateFormat("MM/DD/yyyy hh:mm a");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = new Date(timeStamp.getTime());
String dateString = formatter.format(date);
System.out.println(dateString);
在数据库级别,您可以使用日期时间或时间戳(在 MySQL 中)作为列类型。在 Java 中,您应该使用 java.sql.Timestamp。
乔达时间是可能的,但不是绝对必要的。
您可以将数据库时间值存储为 UTC 或本地时间。我强烈建议您使用 UTC。在 jdbc 连接字符串(即在 hibernate.cfg.xml 中)中,您可以定义日期是 UTC 还是本地时间,如果需要,JDBC 会进行时区转换(UTC 或本地时间以外的其他时区不能在 JDBC 级别定义,如果使用会很麻烦)。
这样做后,您不需要特殊的时区转换方法,除了 Java 类 Calendar、Timezone 和 DateFormat 之外。