Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google数据存储-将日期存储为ISO 8601字符串与java.util.Date_Java_Google App Engine_Jodatime_Objectify_Iso8601 - Fatal编程技术网

Google数据存储-将日期存储为ISO 8601字符串与java.util.Date

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的优势:稳定的查

我正在使用并且注意到DateTime在Google App Engine java数据存储中存储为
java.util.Date
,而LocalDateTime存储为符合ISO 8601的字符串

我知道
java.util.Date
是一种原生类型的数据存储

与符合ISO 8601标准的字符串相比,将日期/时间存储为
java.util.date
有什么特别的优势吗?还是完全相同。当我说优势时,我可能会考虑……的差异。
  • 不等式查询
  • 存储大小
  • 读/写成本
  • 等等

java.util.Date的优势:稳定的查询(不相等和相等)、存储大小以及与其他具有本机日期表示的GAE语言的互操作性。

java.util.Date的优势:稳定的查询(不相等和相等)、存储大小、,以及与其他具有本机日期表示的GAE语言的互操作性。

公认的答案没有错,但我想添加额外的细节,以提供更平衡的视图

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
的其他专有应用程序的数据交换,这种本机类型是可以的,但对于日志记录或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