给定一个日期Java语言就能一年的周给定一个日期Java语言就能一年的周(java get week

2019-05-12 04:10发布

我怎样才能得到给定日期在一年中的一周? 我尝试下面的代码:

  Calendar sDateCalendar = new GregorianCalendar();
  sDateCalendar.set(Integer.parseInt(sDateYearAAAA), Integer.parseInt(sDateMonthMM)-1, Integer.parseInt(sDateDayDD));
  System.out.format("sDateCalendar %tc\n", sDateCalendar);        
  iStartWeek = sDateCalendar.getWeekYear();
  System.out.println("iStartWeek "+iStartWeek+ " "+sDateCalendar.WEEK_OF_YEAR);

和我获得:sDateCalendar纶04月23日11时58分39秒CEST 2012 iStartWeek 2012 3

而一年中的正确一周为17有人能帮助我吗?

Answer 1:

您正在使用sDateCalendar.WEEK_OF_YEAR,这是静态的整数WEEK_OF_YEAR,请参阅java.util.Calendar类的来源:

public final static int WEEK_OF_YEAR = 3;

为了得到周数,你应该使用:

sDateCalendar.get(Calendar.WEEK_OF_YEAR);


Answer 2:

优雅的方式(不需要java.util.Calendar中):

new SimpleDateFormat("w").format(new java.util.Date())


Answer 3:

一个周的定义

您需要定义年度周的 - 。

  • 一个常见的定义是每周#1 1月1日。
  • 一些平均每周#1年举行的一周的第一天的第一个星期(如周日在美国)。
  • 标准ISO 8601的意思是这周#1保持第一个星期四 ,和星期总是以周一开始。 一年可以有52或53周。 第一/最后一周可以有一个基于为期一周的年比历年不同。

要注意的是旧的java.util.Calendar类有一周的定义,通过不同区域设置 。

由于多种原因,你应该避免老java.util.Date/.Calendar类。 相反,使用新的java.time框架。

java.time

Java的8和更高版本自带的java.time框架。 灵感来自乔达时间 ,由JSR 310定义,并通过扩展ThreeTen-EXTRA项目。 请参见教程 。

下面是一些示例代码,以获得ISO 8601标准的一周。

获取一个日期,因此一个星期,取决于上的时区。

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

IsoFields类定义基于一周年。 我们可以要求:

  • 周的年数( WEEK_OF_WEEK_BASED_YEAR
  • 基于本周年(年数WEEK_BASED_YEAR )。

首先,我们获取当前日期时间。

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

询问该日期时间对象,问的是标准的基于周的一年。

int week = now.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR );
int weekYear = now.get ( IsoFields.WEEK_BASED_YEAR );

转储到控制台。

System.out.println ( "now: " + now + " is week: " + week + " of weekYear: " + weekYear );

现在:2016-01-17T20:55:27.263-05:00 [美国/蒙特利尔]是周:weekYear的2:2016

欲了解更多信息,请参阅本类似的问题: 如何从Java中ISO8601周数计算日期

WeekFields

在java.time你也可以呼吁WeekFields类,如WeekFields.ISO.weekBasedYear() 应该有同样的效果IsoFields用Java 8或更高版本的更新版本(一些错误是固定在早期版本的Java 8中)。

YearWeek

对于标准ISO 8601周,考虑将ThreeTen-EXTRA库项目中使用的YearWeek类。

YearWeek yw = YearWeek.of( 2012 , 17 ) ;


文章来源: java get week of year for given a date
标签: java calendar