Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取周开始日期(可配置的周开始日期)_Java - Fatal编程技术网

Java 获取周开始日期(可配置的周开始日期)

Java 获取周开始日期(可配置的周开始日期),java,Java,我有当前日期和一个常数,它告诉我们一周从哪一天开始。我想根据这个常数得到一周的开始日期。如果我将一周的第一天硬编码为星期一(或任何事情),那么它很简单。但是一周的第一天总是在变化。所以我不想更改代码,每次第一天都要更改 这是我在java日历中尝试的: public static Date getLastWeekdayDate() { Calendar calendar = new GregorianCalendar(); int dayOfWeek = calendar.get(

我有当前日期和一个常数,它告诉我们一周从哪一天开始。我想根据这个常数得到一周的开始日期。如果我将一周的第一天硬编码为星期一(或任何事情),那么它很简单。但是一周的第一天总是在变化。所以我不想更改代码,每次第一天都要更改

这是我在java日历中尝试的:

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);