gpt4 book ai didi

java - 计算周、月和年的第一天和最后一天的最佳方法

转载 作者:行者123 更新时间:2023-11-30 06:19:53 26 4
gpt4 key购买 nike

他都是,

我正在尝试计算周、月和年的第一天和最后一天。对于月和年,它工作正常,但星期是错误的:

public Date[] calcDateRange(Calendar c, int day) {
Date[] dr = new Date[2];
// setMin
c.set(day, c.getActualMinimum(day));
dr[0] = c.getTime();
// setMax
c.set(day, c.getActualMaximum(day));
dr[1] = c.getTime();
return dr;
}

public void print() {
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
Calendar cStart = Calendar.getInstance(Locale.GERMANY);
cStart.setFirstDayOfWeek(Calendar.MONDAY);
System.out.println("startdate: " + sdf.format(cStart.getTime()));
Date[] minMaxD = calcDateRange(cStart, Calendar.DAY_OF_WEEK);
System.out.println("start_of_week:\t" + sdf.format(minMaxD[0]) + "\nend_of_week:\t" + sdf.format(minMaxD[1]));
minMaxD = calcDateRange(cStart, Calendar.DAY_OF_MONTH);
System.out.println("start_of_month:\t" + sdf.format(minMaxD[0]) + "\nend_of_month:\t" + sdf.format(minMaxD[1]));
minMaxD = calcDateRange(cStart, Calendar.DAY_OF_YEAR);
System.out.println("start_of_year:\t" + sdf.format(minMaxD[0]) + "\nend_of_year:\t" + sdf.format(minMaxD[1]));
}

有人可以帮我找出我的错误吗?计算日期的最佳方法是什么?

输出:

startdate: 20.03.2014
start_of_week: 23.03.2014 <--- wrong, should be '17.03.2014'
end_of_week: 22.03.2014 <--- wrong, should be '23.03.2014'
start_of_month: 01.03.2014
end_of_month: 31.03.2014
start_of_year: 01.01.2014
end_of_year: 31.12.2014

提前谢谢你。

//编辑

目前我使用以下方法,但我不是很满意:

public Date[] calcDateRange(Calendar c, int day) {
int fdow = c.getFirstDayOfWeek();
c.setFirstDayOfWeek(Calendar.SUNDAY);
Date[] dr = new Date[2];
// setMin
c.set(day, c.getActualMinimum(day));
//..setSecondsMinutes
if (day == Calendar.DAY_OF_WEEK)
c.add(day, 1); // German Week correction
dr[0] = c.getTime();

// setMax
c.set(day, c.getActualMaximum(day));
//..setSecondsMinutes
if (day == Calendar.DAY_OF_WEEK)
c.add(day, 1); // German Week correction
dr[1] = c.getTime();
c.setFirstDayOfWeek(fdow);
return dr;
}

最佳答案

Joda Time 库对于日期和时间方面的事物很有用。由于我还不能发表评论,所以我将其作为答案发布。我建议你调查一下。 http://www.joda.org/joda-time/

//编辑:

我想我已经找到错误的地方了。一周的开始不正确,因为:

你打电话

 Date[] minMaxD = calcDateRange(cStart, Calendar.DAY_OF_WEEK);

然后在 calcDateRange 函数中的一行

c.set(day, c.getActualMinimum(day));

将发生以下情况:

  1. day 变量是一个值为 7 的 int
  2. c.getActualMinimum(day) 将返回 1,因为 getActualMinimum(7) 方法返回字段 7 的最小值,即“DAY_OF_WEEK”,而该字段的最小值等于“SUNDAY”,其值为 1
  3. 你的 c.set(7,1) 会将“DAY_OF_WEEK”设置为 1(“SUNDAY”)

dr[0] = c.getTime();

您将获得 SUNDAY 的时间,因为您设置了它,然后日期返回 23.3。

周末本金相同:

在线

c.set(day, c.getActualMaximum(day));

您将“DAY_OF_WEEK”设置为 SATURDAY,然后它将返回日期 22.3。

//编辑2:周起止计算方法

public Date[] calcDateRangeWeek(Calendar c, int day) {
Date[] dr = new Date[2];
// setMin
c.set(day, Calendar.MONDAY);
dr[0] = c.getTime();
// setMax
c.set(day, Calendar.SUNDAY);
dr[1] = c.getTime();
return dr;
}

关于java - 计算周、月和年的第一天和最后一天的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538433/

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