Calendar 公历

Calendar 公历,calendar,gregorian-calendar,Calendar,Gregorian Calendar,我作业的一部分要求我在学生课堂上使用公历 每个学生都有一个唯一的studentNumber(int)、name(String)** 注册日期(Gregorianalendar) **、id(字符串)和CourseenRolling(CourseOffering) 学校还没有教我如何使用日历,但这是作业中提到的 给定所有必要值(包括注册日期的日期(int)、月份(int)和年份(int))进行所有必要初始化的构造函数 如何在构造函数中输入日-月-年?帮助大家:(tl;dr 改用java.time类

我作业的一部分要求我在学生课堂上使用公历

每个学生都有一个唯一的studentNumber(int)、name(String)**

注册日期(Gregorianalendar)

**、id(字符串)和CourseenRolling(CourseOffering)

学校还没有教我如何使用日历,但这是作业中提到的

给定所有必要值(包括注册日期的日期(int)、月份(int)和年份(int))进行所有必要初始化的构造函数

如何在构造函数中输入日-月-年?帮助大家:(

tl;dr 改用java.time类。与传统类不同,这些现代类使用sane编号:

  • 2018年是2018年
  • 1月至12月为1-12日
  • 周一至周日1-7
time类使用静态工厂方法,而不是
new
构造函数调用

ZoneDateTime
gregoriacalendar
类现在已经过时(很好地摆脱了)。被
zoneDateTime
取代

ZonedDateTime  zdt = 
    ZonedDateTime.of(
        LocalDate.of( 2018 , Month.JANUARY , 23 ) ,
        LocalTime.of( 18 , 30 ) ,
        ZoneId.of( "Africa/Tunis" )
    )
;
zdt.toString():2018-01-23T18:30+01:00[非洲/突尼斯]

LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区

时区对于确定日期至关重要。对于任何给定的时刻,全球各地的日期都因区域而异。例如,年午夜后几分钟是新的一天,而年仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认时区可能随时更改,因此结果可能会有所不同。最好将所需/预期时区显式指定为参数

请以
大陆/地区
的格式指定一个,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如
EST
IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求该时区并将其作为参数传递。如果省略,则会隐式应用JVM的当前默认时区。最好是显式的,因为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
对象,而不仅仅是一个整数,以使您的代码更具自文档性,确保有效值,并提供有效的数据


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的一个试验场。您可能会在这里找到一些有用的类,例如、、。

我们不会做您的家庭作业,但如果您使用谷歌
java 8 gregoriancalendar api
,您将得到基本上能告诉您需要的一切的类我想知道。如果你不知道一个
类是如何工作的,谷歌
java 8 myclass api
。我不是要求任何人帮我做作业吗?我只是列出了作业这一小部分的要求,以便阅读这篇文章的人能够更好地理解我想问的问题。这就是我所做的eded,关于“了解更多”公历的一些信息或指南。对不起,你是对的,我得出了结论。到这里,找到你需要的构造函数:我已经读过了,但不太明白它实际上是如何工作的。我是否要像这样为它创建另一个构造函数?公共学生(int studentNumber,String name,String id,CourseOffering courseEnrolled){this.studentNumber=studentNumber;this.name=name;this.id=id;this.courseEnrolled=courseEnrolled;}公共学生(int year,int month,int dayOfMonth){startDate=new GregorianCalendar(year,month,dayOfMonth)}应该是startDate=new Gregoriacalendar(年,月1日,月日)
ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;
ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
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.
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;