gpt4 book ai didi

java - 如何在 Java 中表示日期

转载 作者:行者123 更新时间:2023-12-01 21:56:42 26 4
gpt4 key购买 nike

我想要一个具有月、年和日属性的简单日期类。

我想要一个 Date 对象包含在一个 Magazine 对象中,这样我就可以知道该杂志是什么时候出版的。

当我尝试使用 Date 类中的 Date 对象时,如下所示日期 d1 = 新日期 (1,1,1);新日期的日期被删除线表明它已被弃用。我读到了有关替换它的新构造函数的信息,但它看起来很困惑。我不明白如何使用 Calendar 类来完成此操作。如果可能的话,我不想创建自己的 Date 类......请帮我。谢谢

最佳答案

tl;dr

I want a Date object to be included in a Magazine object so that I can know when was the Magazine published.

所以添加一个类型为java.time.LocalDate的成员变量。

package work.basil.example;

import java.time.LocalDate;

public class Magazine
{
// Member variables.
public LocalDate published ;

// Constructor.
public Magazine ( LocalDate published )
{
this.published = published;
}
}

使用方法:

Magazine m = new Magazine( LocalDate.of( 2019 , Month.JANUARY , 23 ) ) ;

本地日期

  • 现代方法使用 LocalDate
  • 切勿使用 java.util.Datejava.sql.Date

LocalDate类表示没有日期时间且没有 time zone 的纯日期值或 offset-from-UTC .

时区对于确定日期至关重要。对于任何给定时刻,日期在全局范围内因地区而异。例如,午夜后几分钟 Paris France是新的一天,但在Montréal Québec 中仍然是“昨天” .

如果未指定时区,JVM 将隐式应用其当前默认时区。该默认值可能 change at any moment在运行时 (!),因此您的结果可能会有所不同。最好明确指定您想要/预期的时区作为参数。如果关键,请与您的用户确认该区域。

指定 proper time zone name格式为Continent/Region,例如America/MontrealAfrica/Cas​​ablancaPacific/Auckland .切勿使用 2-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的( !)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果你想使用 JVM 当前的默认时区,请求它并作为参数传递。如果省略,代码将变得难以阅读,因为我们不确定您是否打算使用默认值,或者您是否像许多程序员一样没有意识到这个问题。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

或指定日期。您可以通过数字设置月份,1 月至 12 月的编号为 1-12。

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

或者,更好的是,使用 Month预定义的枚举对象,一年中的每个月一个。提示:在整个代码库中使用这些 Month 对象,而不仅仅是一个整数,以使您的代码更加 self 记录,确保有效值,并提供 type-safety . Year 同上& YearMonth .

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

Table of Java date-time types, both modern and legacy.


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 如何在 Java 中表示日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56520360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com