Java 日期和时间 API 有什么问题? [关闭]

2024-02-26

我经常遇到关于 Java 的负面反馈Date以及其他与日期时间相关的课程。作为一名 .NET 开发人员,我无法完全(没有使用过它们)理解它们到底出了什么问题。

有人能解释一下吗?


啊,爪哇Date班级。也许这是如何不在任何地方用任何语言做某事的最好例子之一。我从哪开始呢?

阅读 JavaDoc 可能会让人认为开发人员实际上已经有了一些好主意。它继续关于之间的区别UTC http://en.wikipedia.org/wiki/Coordinated_Universal_Time and GMT http://en.wikipedia.org/wiki/Greenwich_Mean_Time最后,尽管两者之间的差异基本上是闰秒(发生这种情况)pretty http://alblue.blogspot.com/2008/12/109876543211happy-new-year.html rarely http://alblue.blogspot.com/2005/12/have-one-new-year-get-second-free.html).

然而,这些设计决策确实浪费了任何设计良好的 API 的想法。以下是一些最常见的错误:

  • 尽管是在本世纪的最后十年设计的,但自 1900 年以来,它的年份都是两位数。由于这个平庸的决定,Java 世界中实际上有数百万个解决方法在执行 1900+(或 1900-)。
  • 月份的索引为零,以适应具有月份数组且不使用十三个元素的数组(其中第一个包含null。结果,我们有 0..11(今天是 109 年的第 11 个月)。还有类似的多个 ++ 和 -- 就可以转换为字符串。
  • They're mutable https://stackoverflow.com/q/279507/1429387。因此,任何时候您想要返回日期(例如,作为实例结构),您都需要返回该日期的克隆,而不是日期对象本身(因为否则,人们可以改变您的结构)。
  • The Calendar旨在“解决”此问题的公司实际上犯了同样的错误。它们仍然是可变的。
  • Date代表一个DateTime,但为了遵循 SQL 领域的要求,还有另一个子类java.sql.Date,它代表一天(尽管没有与之关联的时区)。
  • 没有TimeZones 与 a 相关联Date,因此范围(例如“一整天”)通常表示为午夜到午夜(通常在某个任意时区)

最后,值得注意的是,闰秒通常会根据一个小时内通过 ntp 更新的良好系统时钟进行自我校正(请参阅上面的链接)。在引入两个闰秒(至少每六个月,实际上每几年)的情况下,系统仍然正常运行的机会几乎是不可能的,特别是考虑到您必须不时重新部署新版本的代码这一事实。即使使用重新生成类的动态语言或诸如 WAR 引擎之类的东西也会污染类空间并最终耗尽 permgen。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 日期和时间 API 有什么问题? [关闭] 的相关文章

随机推荐

  • 在 C# 中以编程方式创建 Azure AD

    是否可以在 Azure 订阅中以编程方式创建 Azure Active Directory 我查看了 Azure 管理 API 可以看到创建 VM 数据库的方法 但没有看到 WAAD 的方法 如果可能 每个订阅可以创建多少个 WAAD 不可
  • ISerialized 是否向后兼容具有较少字段的类的早期版本?

    抱歉 如果我的问题措辞有点奇怪 基本上 我有一个可序列化的类 目前只有一个字段 但随着我们向系统添加功能 将来肯定会获得更多 序列化过程将用于将实例传递到 WCF 服务 以及从文件读取实例或将实例写入文件 当然 如果我不断用额外的字段更新类
  • 优化 C++ 模板执行

    我正在从事性能至关重要的项目 该应用程序正在处理大量数据 代码是用C 编写的 我需要做一些更改 给出了以下代码 这不是我的代码 我将其简化为最小 void process
  • HAML如何识别块的结尾?

    form for subject url gt action gt create do f render partial gt form locals gt f gt f form buttons submit tag Create Sub
  • Neo4j 使用属性过滤器通过多个关系定向路径

    作为 Cypher 和 Neo4j 的新手 我在为我的用例构建查询时遇到问题 我正在构建一个简单的 ACL 访问控制列表 并正在寻找一条通过权限关系向上层次结构的路径 一张图或许能更好地解释它 Key Users gt Blue Group
  • C# 源生成器应该刷新/删除发出的文件

    我创建了一个源生成器来扩展满足某些条件的 部分 类 为了检查和查看生成的代码 我通过将以下内容添加到我的项目中来启用这些文件的发射
  • 如何使用 Spring Data ElasticSearch 为 POJO 定义 ElasticSearch 索引字段名称

    我正在使用 Spring Data ElasticSearch 来执行 CRUD 操作 默认情况下 当使用 Document 注释的 POJO 写入 ElasticSearch 索引时 索引字段名称与 POJO 的 Java 属性名称相同
  • WPF:如何冻结数据网格中的列标题

    如何将我的列标题冻结在DataGrid in my WPF窗口 以便当我向下滚动时 标题仍然可见 Edit 这是我的XAML
  • Scrapy 将子站点项目与站点项目合并

    我试图从子网站中抓取详细信息并与网站中抓取的详细信息合并 我一直在通过 stackoverflow 以及文档进行研究 但是 我仍然无法让我的代码工作 看来我从子网站提取附加详细信息的功能不起作用 如果有人能看一下我将非常感激 coding
  • 测试元素的类型 python tuple/list

    如何验证列表或元组中所有元素的类型是否相同并且属于某种类型 例如 1 2 3 test for all int True 1 3 a test for all int False all isinstance n int for n in
  • 日期输入的 onchange [重复]

    这个问题在这里已经有答案了 可能的重复 当 的值发生更改时 会触发哪些事件 https stackoverflow com questions 3940258 what events does an input type number fi
  • 从 grails 项目执行甘特脚本

    我已经编写了自己的甘特脚本 它可以在命令行中正常工作 现在我需要从 grails 项目运行这个脚本 如下所示 def outputMessage try GroovyScriptEngine engine new GroovyScriptE
  • 如何使用 TFS REST API 获取迭代剩余天数

    我目前正在使用REST API version 2 0并连接到我的 TFS 实例PowerShell 我可以得到以下信息 迭代ID迭代名称队员团队成员每天的容量 使用下面的示例 GET https instance DefaultColle
  • 在 C# 中扩展枚举

    在java中 我习惯于扩展枚举值或重写方法 如下所示 enum SomeEnum option1 sv public String toString return Some value option2 private String Pass
  • Scala:我可以依赖集合中项目的顺序吗?

    这是一个相当不愉快的意外 scala gt Set 1 2 3 4 5 res18 scala collection immutable Set Int Set 4 5 1 2 3 scala gt Set 1 2 3 4 5 toList
  • Firebase 控制台中出现“您的操作被禁止”问题

    我创建了一个 Android 项目 现在我想将 Firebase 添加到我的 Android 项目中 我在 firebase 控制台上注册我的应用程序 现在 当我尝试将 sha 1 密钥添加到项目中时 出现以下错误 我在谷歌和 stacko
  • Reactjs - 必须返回有效的 React 元素(或 null)

    我有以下简单的代码 var data email email protected cdn cgi l email protection email email protected cdn cgi l email protection var
  • 对特定类的通用约束,为什么? [复制]

    这个问题在这里已经有答案了 我一直在阅读有关利用泛型约束的内容 我发现泛型可以被限制为struct class new Class and Interface 前三个背后的原因非常明显 但我实在无法理解why and when约束到一个类
  • javascript中当数组键包含字符串时删除数组键

    我在 javascript 中有一个数组 如下所示 arr md51234 md55234 我试图通过执行以下操作从中删除一个项目 delete arr md51234 但这似乎不起作用 还有其他方法可以删除这个吗 dystroy 提供了答
  • Java 日期和时间 API 有什么问题? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常遇到关于 Java 的负面反馈Date以及其他与日期时间相关的课程 作为一名 NET 开发人员 我无法完全 没有使用过它们 理解它们到底出