如何获得一周的日期?

问题描述 投票:0回答:3

我知道可以使用给定日期来获得“一年的一周”,但是我如何获得相应的年份?

我知道,年度的定义取决于

Calendar.WEEK_OF_YEAR

。而且我对DIN 1355-1 /ISO8601 /德国解决方案

(但我不想使其成为解决方案)。 

可能会遇到1月1日属于:


新年的第一周(1):例如,2015-01-01在2015年第一年

前一年的最后一周(53):例如,2016-01-01是在2015年第53年的一周

我的问题是今年如何获得?*

    Locale
  • *解决方案不是:Date date = Calender calendar = new GregorianCalendar(Locale.GERMAN) calendar.setTime(date); int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR); int year = ???? <------------ System.out.println(date + " is in " + weekOfYear + " of " + year);
  • date.getYear

date.getFirstDayOfWeek.getYear


    

java.Time
您应该使用Java 8及更高版本内置的
Java.Time
框架。避免使用旧且臭名昭著的麻烦java.util.date/.calendar类。 这些新的Java.Time课程包括for只有日期或时区域的日期价值。请注意,您必须指定一个时区以确定“今天”,因为在世界范围内的日期并不同时相同。
date.getLastDayOfWeek.getYear

java date calendar
3个回答
3
投票

班级提供根据ISO 8601标准提供信息,包括基于一周的一周的一周。

ZoneId zoneId = ZoneId.of ( "America/Montreal" ); ZonedDateTime now = ZonedDateTime.now ( zoneId );

一年的开始/结束,基于周的年度可能与日历年不同。例如,请注意2015年底的Gregorian和ISO 8601日历之间的区别:52&1变为52&53.



    

java 8或以后?


转到Basil Bourque的答案

使用Java的java.timeenter image description hereApi.

Otherwise(三思而后行!)请参阅我的原始答案,以使用此问题中提出的过时Java API。

prejava 8?enter image description here


2
投票
为您给定的例子返回

int calendarYear = now.getYear(); int weekNumber = now.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR ); int weekYear = now.get ( IsoFields.WEEK_BASED_YEAR ); // Answer to Question 请参阅Gregoriancalendar#getweekyear()

以及

用于参考 calendar.getWeekYear(); returns

2015


Calendar calendar = new GregorianCalendar(Locale.GERMAN); calendar.set(2016, Calendar.JANUARY, 1, 0, 0, 0); Date date = calendar.getTime(); int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR); int year = calendar.getWeekYear(); System.out.println(date + " is in " + weekOfYear + " of " + year);

在2014年3月,Java 8推出了现代的日期API,该API取代了Error prone legacy

Fri Jan 01 00:00:00 CET 2016 is in 53 of 2015

date timeapi
。任何新代码都应使用
java.time
api.

一周的第一天是环境敏感 您的回答中已经提到了它;因此,我会简短。 ISO-8601标准,其次是欧洲大部分地区,定义了一个星期从星期一开始。然而,在美国,

a周从周日开始。由于这种差异,一年的第一周和一周中的ISO-8601标准遵循的国家 /地区有所不同。检查

这个答案以了解有关它的更多信息。 我知道calendar.week_of_year可以用来获得“周 “在给定的日期,但是我如何获得相应的一年?

使用
java.time
api

solution

您可以使用
java.util

0
投票
使用

java.time

demo
java.time
输出

WeekFields#weekOfWeekBasedYear

在Ideone上尝试它

了解更多有关现代日期API的trail:datetime.

© www.soinside.com 2019 - 2025. All rights reserved.