Java 是否有提供每月第一天的功能?
在Java中,我可以通过以下方式获得每月的第一天:Java 是否有提供每月第一天的功能?,java,dayofweek,date,dayofmonth,Java,Dayofweek,Date,Dayofmonth,在Java中,我可以通过以下方式获得每月的第一天: GregorianCalendar date; // Some code int first = new GregorianCalendar(date.get(Calendar.YEAR), date.get(Calendar.MONTH), 1).get(Calendar.DAY_OF_WEEK); 我想知道是否有一个函数可以直接做到这一点,因为我找不到一个函数来获取这些重要信息 类似于我在这里尝试做的事情: fo
GregorianCalendar date;
// Some code
int first = new GregorianCalendar(date.get(Calendar.YEAR),
date.get(Calendar.MONTH), 1).get(Calendar.DAY_OF_WEEK);
我想知道是否有一个函数可以直接做到这一点,因为我找不到一个函数来获取这些重要信息
类似于我在这里尝试做的事情:
for (int i = 1; i < days_in_month + first; i++) {
// Some code
if (i - first + 1 == date.get(Calendar.DAY_OF_MONTH)) {
// Do something
}
}
for(int i=1;i
简单地说,不。这是获得类似产品的正确方法
这就是他们在Java中提供的使类似计算成为可能的功能。任何类型的“直接函数”都会在内部执行(我建议您执行)。简单地说,不。这是获得类似内容的正确方法
这就是他们在Java中提供的使类似计算成为可能的功能。任何类型的“直接函数”都可以在内部执行此操作(我建议您这样做)。您可以将
GregoriaCalendar
对象转换为LocalDate
对象,并使用其方便的API:
LocalDate getWithFirstDayOfMonth(GregorianCalendar c) {
LocalDate date = c.toZonedDateTime().toLocalDate();
return date.withDayOfMonth(1);
}
GregorianCalendar calendar = GregorianCalendar.from(ZonedDateTime.now());
LocalDate first = getWithFirstDayOfMonth(calendar);
System.out.println(first.getDayOfMonth());
您可以将
gregoriacalendar
对象转换为LocalDate
对象,并使用其方便的API:
LocalDate getWithFirstDayOfMonth(GregorianCalendar c) {
LocalDate date = c.toZonedDateTime().toLocalDate();
return date.withDayOfMonth(1);
}
GregorianCalendar calendar = GregorianCalendar.from(ZonedDateTime.now());
LocalDate first = getWithFirstDayOfMonth(calendar);
System.out.println(first.getDayOfMonth());
tl;博士
要获取表示一周中某一天(周一至周日为1-7)的整数,请执行以下操作:
myGregCal // Avoid troublesome legacy date-time classes such as `GregorianCalendar`.
.toZonedDateTime() // Convert from legacy class to modern java.time class, a `ZonedDateTime` object.
.toLocalDate() // Extract a date-only object.
.with( TemporalAdjusters.firstDayOfMonth() ) // Adjust into first day of the same year-month.
.getDayOfWeek() // Extract a `DayOfWeek` enum object for Monday, Tuesday, etc. Consider using this object directly rather than taking the next step to extract a `int` number.
.getValue() // Extract an `int` integer number, 1-7 for Monday-Sunday.
…星期一和星期天的数字为1-7
提示:最好跳过最后一步,使用DayOfWeek
对象而不是int
:
myGregCal.toZonedDateTime().toLocalDate().with( TemporalAdjusters.firstDayOfMonth() ).getDayOfWeek() // Render a `DayOfWeek` enum object.
java.time
这可能是正确的,使用现代java.time类而不是传统的日期时间类会赢得分数。但对这类代码有一个更简单的理解。此外,这个问题似乎想更进一步,得到一个月的第一个星期几
根据Andreas的评论,您可以调用GregorianCalendar::toZonedDateTime
,这是一种从旧的传统类GregorianCalendar
转换到现代的ZonedDateTime
类的简单方法。旧类获得了新方法,以便于在遗留类和现代java.time类之间进行转换
从中提取一个LocalDate
对象。该类表示一个仅限日期的值,不包含一天中的时间和时区
LocalDate ld = zdt.toLocalDate() ;
将该值调整为当月的第一天。使用在类中找到的实现
通过枚举对象确定该月初日期的星期几。该枚举预先定义了7个对象,一周中的每一天一个:,等等
考虑使用DayOfWeek
enum对象,而不是简单的int
数字来表示一周中的某一天。使用对象而不是int
原语可以使代码更加自我记录,提供类型安全性,并确保有效值
但如果您坚持,您可以根据标准提取周一至周日的int
1-7
int dowNumber = dow.getValue() ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,
gregorianalendar
,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看
myGregCal // Avoid troublesome legacy date-time classes such as `GregorianCalendar`.
.toZonedDateTime() // Convert from legacy class to modern java.time class, a `ZonedDateTime` object.
.toLocalDate() // Extract a date-only object.
.with( TemporalAdjusters.firstDayOfMonth() ) // Adjust into first day of the same year-month.
.getDayOfWeek() // Extract a `DayOfWeek` enum object for Monday, Tuesday, etc. Consider using this object directly rather than taking the next step to extract a `int` number.
.getValue() // Extract an `int` integer number, 1-7 for Monday-Sunday.
…星期一和星期天的数字为1-7
提示:最好跳过最后一步,使用DayOfWeek
对象而不是int
:
myGregCal.toZonedDateTime().toLocalDate().with( TemporalAdjusters.firstDayOfMonth() ).getDayOfWeek() // Render a `DayOfWeek` enum object.
java.time
这可能是正确的,使用现代java.time类而不是传统的日期时间类会赢得分数。但对这类代码有一个更简单的理解。此外,这个问题似乎想更进一步,得到一个月的第一个星期几
根据Andreas的评论,您可以调用GregorianCalendar::toZonedDateTime
,这是一种从旧的传统类GregorianCalendar
转换到现代的ZonedDateTime
类的简单方法。旧类获得了新方法,以便于在遗留类和现代java.time类之间进行转换
从中提取一个LocalDate
对象。该类表示一个仅限日期的值,不包含一天中的时间和时区
LocalDate ld = zdt.toLocalDate() ;
将该值调整为当月的第一天。使用在类中找到的实现
通过枚举对象确定该月初日期的星期几。该枚举预先定义了7个对象,一周中的每一天一个:,等等
考虑使用DayOfWeek
enum对象,而不是简单的int
数字来表示一周中的某一天。使用对象而不是int
原语可以使代码更加自我记录,提供类型安全性,并确保有效值
但如果您坚持,您可以根据标准提取周一至周日的int
1-7
int dowNumber = dow.getValue() ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,
gregorianalendar