Java 获取周开始日期(可配置的周开始日期)
我有当前日期和一个常数,它告诉我们一周从哪一天开始。我想根据这个常数得到一周的开始日期。如果我将一周的第一天硬编码为星期一(或任何事情),那么它很简单。但是一周的第一天总是在变化。所以我不想更改代码,每次第一天都要更改 这是我在java日历中尝试的:Java 获取周开始日期(可配置的周开始日期),java,Java,我有当前日期和一个常数,它告诉我们一周从哪一天开始。我想根据这个常数得到一周的开始日期。如果我将一周的第一天硬编码为星期一(或任何事情),那么它很简单。但是一周的第一天总是在变化。所以我不想更改代码,每次第一天都要更改 这是我在java日历中尝试的: public static Date getLastWeekdayDate() { Calendar calendar = new GregorianCalendar(); int dayOfWeek = calendar.get(
public static Date getLastWeekdayDate()
{
Calendar calendar = new GregorianCalendar();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int daysToSubtractFromCurrentDate = 0;
switch (dayOfWeek)
{
case Calendar.WEDNESDAY:
daysToSubtractFromCurrentDate = 4;
break;
case Calendar.THURSDAY:
daysToSubtractFromCurrentDate = 5;
break;
case Calendar.FRIDAY:
daysToSubtractFromCurrentDate = 6;
break;
case Calendar.SATURDAY:
daysToSubtractFromCurrentDate = 0;
break;
case Calendar.SUNDAY:
daysToSubtractFromCurrentDate = 1;
break;
case Calendar.MONDAY:
daysToSubtractFromCurrentDate = 2;
break;
case Calendar.TUESDAY:
daysToSubtractFromCurrentDate = 3;
break;
}
calendar.add(Calendar.DATE, -daysToSubtractFromCurrentDate);
calendar.set(Calendar.AM_PM, Calendar.AM);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
我想知道一周的开始日期。上面的函数返回一周的第一天,周开始日期硬编码为星期六。每当一周开始日的需求发生变化时,我就必须更改代码。来自java日历API
我使用了以下方法:
/** 1 = Sunday, 2 = Monday, 3 = Tuesday, 4 = Wednesday, 5 = Thursday,
* 6 = Friday, 7 = Saturday
*/
public static Date getFirstDayOfWeekDate(int firstDay)
{
// Calculate the date of the first day of the week
// First get the today's date
Calendar c = new GregorianCalendar();
// Now set the day of week to the first day of week
while (c.get(Calendar.DAY_OF_WEEK) != firstDay)
{
c.add(Calendar.DAY_OF_MONTH, -1);
}
return c.getTime();
}
tl;博士
看这个
zdt:2017-07-09T00:00-04:00[美国/蒙特利尔]|星期几:星期日
避免遗留类
您使用的是现在遗留的麻烦的旧日期时间类,被java.time类取代
DayOfWeek
不要在代码中仅仅使用整数来表示一周中的哪一天,而是使用内置的Java。这将提高您的键入安全性,确保有效值,并使您的代码更加自我记录
DayOfWeek weekStart = DayOfWeek.SUNDAY ; // Pass whatever `DayOfWeek` object you want.
TemporalAdjuster
和LocalDate
TemporalAdjuster
界面提供了操纵一个日期以获取另一个日期的方法。在TemporalAdjusters
类中找到一些实现(注意复数形式)
ZoneDateTime
要获得准确的时刻,请询问LocalDate
一天中的第一个时刻。这一时刻取决于时区,因为全球任何给定时刻的日期都不同
ZonedDateTime zdt = start.atStartOfDay( z ) ;
Instant
如果要以UTC格式查看某个时刻,请提取一个Instant
对象
Instant instant = zdt.toInstant() ; // Same moment, different wall-clock time.
你能告诉我们吗?@vikingsteve我已经编辑了这个问题,请看一看look@UwePlonus我已经编辑了这个问题,请看一看可能是重复的:@awiebe a
GregorianCalendar
从定义的日期开始!在欧洲,在大多数情况下,本周的开始是星期一。先生,这会有什么帮助?我想知道一周中第一天的日期。一周不一定从星期天或星期一开始。它可以从一周中的任何一天开始。你读过这个问题吗?是的,我读过这个问题——但是一周的第一天在一个特定的地区永远不会改变。实际上,一个月可能从一周的第一天以外的某一天开始。如果这是你的问题,那么答案是:
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
LocalDate start = today.with( TemporalAdjusters.previousOrSame( weekStart ) ) ;
ZonedDateTime zdt = start.atStartOfDay( z ) ;
Instant instant = zdt.toInstant() ; // Same moment, different wall-clock time.
DateTimeFormatter format = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate now = LocalDate.now();
String startDate = now.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).format(format);