【问题标题】:What Java data type will Date of Birth be? [duplicate]Date of Birth 是什么 Java 数据类型? [复制]
【发布时间】:2016-03-31 14:50:50
【问题描述】:

我目前正在 Android 上制作一个应用程序,用户将在其中注册他们的详细信息。

在我的数据库中,我将 DOB 作为 Date 类型。

我会在 Java 中将 DOB 声明为 String 吗? Double? Int?我很困惑如何解决这个问题,以便它满足数据库的日期格式。

任何帮助都会很棒!

【问题讨论】:

  • 通常人们确实会将出生日期存储为日期对象。但这取决于应用程序和底层数据库。你能提供更多信息吗?
  • 那么在数据库中,用户的出生日期将被存储为“DATE”类型,所以在我的 Java 程序中,当我声明对象时:public class User { String firstName, lastName, email, school, sType, password; int dob; 会是这样吗?我知道它不会是 Int,但它会是什么?
  • 您可以将日期存储为 int(例如儒略日);如果你使用LocalDate,它会更容易使用。

标签: java type-conversion date


【解决方案1】:

java.time.LocalDate(或逻辑上等效的类,如 org.joda.time.LocalDate)是在 Java 代码中表示出生日期 (DOB) 的最佳方式。

请注意,DOB 没有很好地建模为 java.sql.Datejava.util.Date:这些模型即时在时间上,而不是与时区无关的日期。

虽然一个人显然是在某个时刻出生的,但这不是我们在社会上报告我们出生时的方式。考虑到两个在不同时区同时出生的孩子实际上可能有不同的出生日期 - 如果纽约市的孩子在 4 月 1 日凌晨 2 点出生,那么在洛杉矶出生的孩子则在 3 月 31 日晚上 10 点出生。

孩子的出生日期在他们前往另一个城市(当然,或其他任何地方)时都不会改变。因此,如果您存储出生即时,您还需要存储出生时区,以便正确地将那个时刻解释为出生日期。 p>

但是存储一个瞬间一个时区是不方便的:不仅要存储更多的数据,而且很难“用肉眼”解释它(例如,很难判断日期@ 987654329@指)。直接存储和解释年月日要容易得多:(2016, 3, 31)

【讨论】:

  • 所以一旦我导入java.time.LocalDate,如果我将出生日期声明为int dob,我该如何实现它以便使用该应用程序的用户可以输入他们的出生数据,我该怎么做( 2016, 3, 31) 可以作为 int 接受吗?
  • 好吧,我建议您将其存储为LocalDate,而不是int。但是,如果您必须将其存储为int(这又回到了上面的“日期1459438541000 是什么意思”的问题),您可以将其存储为给定数据后的天数,例如朱利安日期。
  • * 我建议您在 Java 代码中表示LocalDate。你可以坚持它,但它很方便。
  • @AndyTurner 很好的答案是除了一个问题:java.sql.Date 确实假装是一个与java.time.LocalDate 类似的仅日期值。 java.sql.Date(尴尬地)继承自 java.util.Date。因此,它确实包含一天中的时间,但将其设置为00:00:00.0,这是一种设计不佳的尝试,试图伪装成本地日期,而不是您所指出的即时时间。我们确实使用 java.sql.Date 作为将 java.time.LocalDate 值移入/移出数据库的类,直到我们的 JDBC 驱动程序更新为直接处理 java.time 类型。
  • @BasilBourque 是的,它假装就是这样,但它不会立即改变基本表示。它比使用LocalDate 更容易出错——例如,System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(new java.sql.Date(0))) 的输出取决于 JVM 配置。我并不是说它不能使用它,只是它需要比LocalDate更多的小心。
猜你喜欢
  • 2018-10-15
  • 2014-09-10
  • 1970-01-01
  • 2011-02-17
  • 2017-03-05
  • 2013-01-06
  • 2021-04-08
  • 2013-04-12
  • 2019-08-10
相关资源
最近更新 更多