Google数据存储-将日期存储为ISO 8601字符串与java.util.Date
我正在使用并且注意到DateTime在Google App Engine java数据存储中存储为Google数据存储-将日期存储为ISO 8601字符串与java.util.Date,java,google-app-engine,jodatime,objectify,iso8601,Java,Google App Engine,Jodatime,Objectify,Iso8601,我正在使用并且注意到DateTime在Google App Engine java数据存储中存储为java.util.Date,而LocalDateTime存储为符合ISO 8601的字符串 我知道java.util.Date是一种原生类型的数据存储 与符合ISO 8601标准的字符串相比,将日期/时间存储为java.util.date有什么特别的优势吗?还是完全相同。当我说优势时,我可能会考虑……的差异。 不等式查询 存储大小 读/写成本 等等 java.util.Date的优势:稳定的查
java.util.Date
,而LocalDateTime存储为符合ISO 8601的字符串
我知道java.util.Date
是一种原生类型的数据存储
与符合ISO 8601标准的字符串相比,将日期/时间存储为java.util.date
有什么特别的优势吗?还是完全相同。当我说优势时,我可能会考虑……的差异。
- 不等式查询
- 存储大小
- 读/写成本
- 等等
- 存储只使用一种日期格式(ISO定义了三种:日历日期、序数日期和星期日期)
- 对于时间部分,始终使用一个精度度(例如,始终以毫秒为单位)
- 对于全局时间戳,始终使用UTC(即符号Z的零偏移)
java.util.Date
不需要同样的注意
b) 精度:ISO-8601可以在毫秒之外表达更高的精度,而java.util.Date
和Joda时间在这里是有限的。如果您以后可能会想到其他新的时间库,比如Java8中的JSR-310或我自己的时间库,它们提供纳秒精度,那么这一点尤其正确。然后,所有JDBC类型、java.util.Date
和数据库列(只要它们不是CHAR或VARCHAR)都会出现精度问题
一个引人注目的例子是JDBC类型java.sql.Time
,其精度仅限于秒,而不是更好。这与新的Java8类型java.time.LocalTime
形成了很大的对比,后者提供纳秒。更糟糕的是:这一方面也与应用程序层中的Joda Time和java.util.Date
有关
出于学术目的:Leapseconds只能以ISO-8601格式存储,不能使用java.util.Date
或类似格式
c) 存储大小:当然,java.util.Date
的表示形式更加紧凑,但我不得不说,现在磁盘空间很便宜,所以这一点不必太担心
d) 读写成本:此项支持压缩数据类型,如java.util.Date
。但是,你也必须考虑到,即使在这种情况下,你必须在任何其他层中以人类可读的格式来表示它(无论是在日志记录还是在表示层中)。因此,对于与期望java.util.Date
的其他专有应用程序的数据交换,这种本机类型是可以的,但对于日志记录或XML数据交换而言,ISO-8601可能是更好的格式
如果你真的非常关心性能开销,你甚至可以考虑一个数字类型(长64位)来避免不必要的对象创建(在极端边缘情况下)的垃圾负担。请记住:
java.util.Date
只是一个长文件的包装。公认的答案没有错,但我想添加额外的细节,以提供更平衡的视图
a) 稳定查询:ISO-8601是稳定的,只要您断言
- 存储只使用一种日期格式(ISO定义了三种:日历日期、序数日期和星期日期)
- 对于时间部分,始终使用一个精度度(例如,始终以毫秒为单位)
- 对于全局时间戳,始终使用UTC(即符号Z的零偏移)
java.util.Date
不需要同样的注意
b) 精度:ISO-8601可以在毫秒之外表达更高的精度,而java.util.Date
和Joda时间在这里是有限的。如果您以后可能会想到其他新的时间库,比如Java8中的JSR-310或我自己的时间库,它们提供纳秒精度,那么这一点尤其正确。然后,所有JDBC类型、java.util.Date
和数据库列(只要它们不是CHAR或VARCHAR)都会出现精度问题
一个引人注目的例子是JDBC类型java.sql.Time
,其精度仅限于秒,而不是更好。这与新的Java8类型java.time.LocalTime
形成了很大的对比,后者提供纳秒。更糟糕的是:这一方面也与应用程序层中的Joda Time和java.util.Date
有关
出于学术目的:Leapseconds只能以ISO-8601格式存储,不能使用java.util.Date
或类似格式
c) 存储大小:当然,java.util.Date
的表示形式更加紧凑,但我不得不说,现在磁盘空间很便宜,所以这一点不必太担心
d) 读写成本:此项支持压缩数据类型,如java.util.Date
。但是,你也必须考虑到,即使在这种情况下,你必须在任何其他层中以人类可读的格式来表示它(无论是在日志记录还是在表示层中)。因此,对于与期望java.util.Date