gpt4 book ai didi

java - 如何用java生成日历?

转载 作者:行者123 更新时间:2023-12-02 13:32:49 27 4
gpt4 key购买 nike

我需要构建一个生成日历的后端 Java 类。日历有 12 个月来完成一年。那一年的正月是七月,最后一个月是六月。从某种意义上说,生成的日历中的月份将具有不同的年份。例如,第一个月为 2016 年 7 月,最后一个月为 2017 年 6 月,依此类推。以下是我到目前为止所拥有的。

public class Calendars {

public Date startDate;
public Date endDate;
public String periodName;//This is the name of the year(e.g July-2016 to June-2017 may be called period01)
public short physicalYear;//This is the normal year

public Calendars() {
}

public Calendars(Date startDate, Date endDate, String periodName, short physicalYear) {
this.startDate = startDate;
this.endDate = endDate;
this.periodName = periodName;
this.physicalYear = physicalYear;
}

public Date getStartDate() {
return startDate;
}

public void setStartDate(Date startDate) {
this.startDate = startDate;
}

public Date getEndDate() {
return endDate;
}

public void setEndDate(Date endDate) {
this.endDate = endDate;
}

public String getPeriodName() {
return periodName;
}

public void setPeriodName(String periodName) {
this.periodName = periodName;
}

public short getPhysicalYear() {
return physicalYear;
}

public void setPhysicalYear(short physicalYear) {
this.physicalYear = physicalYear;
}

@Override
public String toString() {
return "Calendars{" +
"startDate=" + startDate +
", endDate=" + endDate +
", periodName='" + periodName + '\'' +
", physicalYear=" + physicalYear +
'}';
}
}

最佳答案

tl;博士

YearMonth.of( 2017 , Month.JULY )
.plusYears( 1 )

避免遗留日期时间类

避免旧的遗留日期时间类,例如DateCalendar。它们很麻烦、令人困惑、设计拙劣且存在缺陷。现在被 java.time 类取代。

年月

您似乎想要跟踪整月的时间跨度。为此,请使用 YearMonth类。

请注意,与遗留类不同,在 java.time 中,月份具有合理的编号,1-12 表示一月至十二月。

YearMonth start = YearMonth.of( 2017 , 7 );
YearMonth stop = start.plusYears( 1 );

或者使用方便的 Month 指定月份枚举。

YearMonth start = YearMonth.of( 2017 , Month.JULY );

如果您需要当前的YearMonth,请指定时区。请记住,对于任何特定时刻,全局各地的日期因地区而异,因此月份也可能会有所不同。

指定proper time zone name格式为大洲/地区,如America/Montreal , Africa/Casablanca ,或太平洋/奥克兰。切勿使用 3-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的( !)。

ZoneId z = ZoneId.of( "America/Montreal" );
YearMonth ym = YearMonth.now( z );

本地日期

要处理单个日期,请使用 LocalDate类。

LocalDate firstOfMonth = ym.atDay( 1 );
LocalDate dayAfter = firstOfMonth.plusDays( 1 );
LocalDate endOfMonth = ym.atEndOfMonth();
<小时/>

关于java.time

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

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

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

从哪里获取java.time类?

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

关于java - 如何用java生成日历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43135525/

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