Java我可以通过这种方式得到一个月的第一天:
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
}
}
要获取表示一周中某一天(周一至周日为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.
Oleksandr的答案可能是正确的,并且使用现代java会赢得分数。时间类,而不是传统的日期时间类。但对这类代码有一种更简单的理解。此外,这个问题似乎想更进一步,以获得一个月的第一个星期几。
根据Andreas的评论,您可以调用GregorianCalendar::ToZoneDateTime
,这是一种从旧的传统类GregorianCalendar
转换到现代的ZoneDateTime
类的简单方法。旧类获得了新方法,以便于在遗留类和现代java之间进行转换。时间课。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ; // Convert from legacy class to modern class.
从那里提取一个LocalDate
对象。LocalDate
类表示一个仅限日期的值,没有一天中的时间和时区。
LocalDate ld = zdt.toLocalDate() ;
将值调整到同月的第一天。使用在TemporalAdouners
类中找到的TemporalAdouner
实现。
LocalDate firstOfMonth = ld.with( TemporalAdjusters.firstDayOfMonth() ) ;
通过DayOfWeek
enum对象确定该月初日期的星期几。该枚举预先定义了7个对象,一周中的每一天一个:周一、周二等。
DayOfWeek dow = firstOfMonth.getDayOfWeek() ;
考虑使用DayOfWeek
enum对象,而不是简单的int
数字来表示一周中的某一天。使用对象而不是int
原语可以使代码更加自我记录,提供类型安全性,并确保有效值。
但如果您坚持,您可以根据ISO 8601标准提取周一至周日的int
1-7。
int dowNumber = dow.getValue() ;
爪哇。时间框架内置于Java8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,比如java。util。日期
,日历
,公历
,
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
在哪里可以获得java。时间课?
额外的Three Ten项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,等等。
简单地说,不。这是得到这样东西的正确方法。
这实际上就是他们在Java中提供的功能,使这样的计算成为可能。任何类型的“直接功能”都会在内部完成(我建议您这样做)
您可以将GregorianCalendar
对象转换为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());
所以我需要制作一个基本日历,显示特定年份和月份的日历(用户应该能够根据文本输入选择任何月份和任何年份)。 到目前为止,我已经成功地创建了一个日历obj,使用扫描仪从用户那里获取所需的月份和年份,但我的问题是,我如何找出一个月的第一天是什么?在上面的例子中,今天是星期六。我构建它的逻辑是,如果我知道第一天,我可以创建一个字符串[][]数组,通过循环从第一天开始的月份,开始显示相关日期的日期。我用扫描
log4j2是否提供任何机制来每天滚动文件,并在月末归档日志文件?我可以实现每日滚动,但一个月后,我想压缩所有日志并移动到存档文件夹
问题内容: 我只是熟悉Apache JackRabbit。我已经完成了一些用于文档管理的多用户存储库。 如果有人同时使用它们,您能回答这些问题吗? ModeShape是否以某种方式链接到JBoss?我对JBoss AS或任何其他JBoss工具没有太多经验。我看到了对tomcat的支持,但是有很多JBossy的东西 文档说将来的发行版应该具有UI集成,这还有很长的路要走吗?它将是什么样的UI集成?是
问题内容: 我正在设法迅速获得每月的第一天和最后一天。 到目前为止,我有以下内容: 但是我不确定如何获得最后的约会。我是否缺少内置方法?显然,它必须考虑leap年等。 问题答案: 您只需使用以下命令即可获得每月的第一天 要获得该月的最后一天,请添加一个月并减去一天: 或者,使用为您提供开始时间和月份长度的方法: 对于月份的最后一天的日期,请加上月份的长度减去一秒: 为Swift5更新:
问题内容: 亲爱的专业人员, 我有一个查询来获取本月的第一天和最后一天,但是我对本月第一天的时间戳有疑问。 自2015年2月起,我希望获得以下结果: @LastDOM是正确的,但是我没有得到@FirstDOM的时间戳部分的零,我得到了正确的日期,但是是运行脚本的时间。假设是上午8:50,我得到: 修复此小故障的最佳方法是什么? 问候, 缺口 问题答案: 将@FirstDOM转换为如下形式: 我希望
问题内容: 我需要在SQL Server 2012环境中基于2个参数创建临时表或公用表表达式 因此,如果 和 我想从当前年份生成5年的临时表,其中包含4列,例如 是否可以有效地执行“做而做”循环?我该如何计算月份名称?我正在使用一个非常麻烦的Do While循环对一年中的所有月份进行迭代,然后对所有年份进行迭代。 问题答案: 使用递归CTE的一种方法: 或使用数字表:(在这种情况下为master.