`
kanpiaoxue
  • 浏览: 1781667 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

setFirstDayOfWeek in Calendar 不起作用,失效,不能用

    博客分类:
  • java
 
阅读更多

在使用Calendar的时候,往往因为国外和中国的习惯不同,而造成迥异。比如,老外习惯周日作为每周的起始第一天,而中国习惯用周一作为每周的起始第一天。

我看见Calendar的API里面有 setFirstDayOfWeek()。

所以我设置setFirstDayOfWeek(Calendar.MONDAY)

但是发现使用cal.get(Calendar.DAY_OF_WEEK)得到的,还是以周日为起始第一天的结果。很是郁闷。上网找了,老外也有遇到这个问题的。老外遇到的问题:

 

 

  1.  Calendar myCalendar = Calendar.getInstance();  
  2.   myCalendar.setTime(new Date());  
  3.   System.out.println(myCalendar.get(Calendar.DAY_OF_WEEK);  
  4.   myCalendar.setFirstDayOfWeek(Calendar.MONDAY);  
  5.   System.out.println(myCalendar.get(Calendar.DAY_OF_WEEK); 

Calendar returns the same value before and after setFirstDayOfWeek.
Any ideas on why this doesn't work and how to get it to work?

另一个老外给出了结论,才让我恍然大悟:

This is one of many ways in which java.util.Calendar is counterintuitive. It does work, but not the way you're expecting. Look at the documentation[ for the DAY_OF_WEEK field: "This field takes values SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and SATURDAY." When your program prints 6, it's telling you that the day of week is FRIDAY. This constant value has nothing to do with the beginning of the week - it's just a constant that means FRIDAY. It does coincidentally happen to be the same as the day of the week if the first day of the week is SUNDAY (1) - but it doesn't change if the first day of the week is redefined.

Compare this to the API for WEEK_OF_MONTH and WEEK_OF_YEAR, which do say that they depend on the first day of the week. You can test to see if this works correctly for your purposes.

If you really need a number representing day of week with 1 meaning Monday and 7 meaning Sunday, you can get it with a tiny bit of math:
  1. int dayOfWeek = myCalendar.get(Calendar.DAY_OF_WEEK) - 1;  
  2. if (dayOfWeek == 0)  
  3.     dayOfWeek = 7;  

看完了,就明白了。
public int getDayOfWeek(String dateString){
	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
	try {
		Date date = format.parse(dateString);
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.setFirstDayOfWeek(Calendar.MONDAY);
		int tmp = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (0 == tmp) {
			tmp = 7;
		}
		return tmp;
	} catch (ParseException e) {
		e.printStackTrace();
		return -1;
	}
}
 


分享到:
评论

相关推荐

    uni-app 插件 Calendar 日历多选 (不是范围选择)

    【uni-app插件Calendar日历多选】是一个用于在uni-app框架中实现多日期选择功能的组件。uni-app是一款基于Vue.js开发的多端统一框架,它允许开发者编写一次代码,就能运行在H5、微信小程序、支付宝小程序、百度小...

    Calendar使用示例文件

    ### Calendar使用示例详解 #### 一、简介 在Java编程语言中,`Calendar`类是处理日期和时间的核心类之一。它为获取特定瞬间的日期和时间信息提供了丰富的功能,比如年、月、日、时、分、秒等。此外,`Calendar`还...

    Android 使用Calendar获取时间信息

    在这个项目中,我们将会深入探讨如何使用`Calendar`来获取年、月、日、时、分以及秒等时间信息。 首先,`Calendar`类不是线程安全的,因此在多线程环境中使用时需要额外注意同步问题。在Android中,我们通常会通过`...

    calendar_iview.rplib

    iview(新版为view UI)的calendar(日历)组件的Axure元件库,直接导入即可使用,Axure 9

    Java中用Calendar类计算周和周的起始日期

    在 Java 中用 Calendar 类计算周和周的起始日期需要了解 Calendar 类的使用方法和日期计算的逻辑,包括 setFirstDayOfWeek() 方法、getWeekOfYear() 方法、getFirstDayOfWeek() 方法和 getLastDayOfWeek() 方法等。...

    java的calendar具体用法

    - 虽然`Calendar`类本身不直接支持日期格式化,但可以结合`SimpleDateFormat`类来实现。 ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = sdf.format(calendar....

    Calendar日期代码详解

    `Calendar` 是一个抽象类,因此不能直接实例化,通常我们通过 `getInstance()` 方法来获取其实例。 #### 2. 示例代码解析 在给定的示例代码中,主要展示了如何使用 `Calendar` 类来获取并操作日期时间信息。下面...

    Java 之 Date 和 Calendar 实例

    在Java编程语言中,`Date`和`Calendar`类是处理日期和时间的核心组件。这两个类在不同的Java版本中有着不同的使用方式和功能,对于理解Java时间处理机制至关重要。本篇将深入探讨`Date`和`Calendar`类的实例应用。 ...

    calendar选择时间控件,绝对好用

    这需要使用CSS媒体查询和布局策略来确保在不同设备上都能良好展示。 - **事件处理和验证**:控件通常会绑定到JavaScript事件,如点击、改变等,以便在用户交互时进行响应。同时,可能需要进行日期和时间的有效性...

    聊一聊Calendar的使用

    这篇博文“聊一聊Calendar的使用”可能详细介绍了如何利用`Calendar`进行日期计算、时间格式化以及其他相关操作。`Calendar`类在实际开发中非常常见,尤其在需要对日期进行复杂处理时,如计算两个日期之间的差值、...

    POJ 1008 Maya Calendar

    此程序我运用的都是C++基础知识,方便新手学习理解,在VC6.0上测试0错误0警告,可放心使用,在此衷心希望大家学习进步 以下是题目 Description During his last sabbatical, professor M. A. Ya made a ...

    Calendar万年历

    【标题解析】:“Calendar万年历”这个标题指的是一个与日历相关的程序或者代码库,可能是一个能够显示多年甚至上百年日历的应用。在IT领域,"Calendar"通常指的是用于管理日期和时间的软件组件,它可以包括日程安排...

    android日历 calendar的使用

    例如,`calendar.get(Calendar.YEAR)` 获取年份,`calendar.get(Calendar.MONTH)` 获取月份(注意,月份是从0开始的,1代表二月),`calendar.get(Calendar.DAY_OF_MONTH)` 获取月份中的第几天,`calendar.get...

    simplecalendar.js记录事件的日历插件

    在现代网页设计中,日历插件已经成为不可或缺的一部分,它能帮助用户直观地管理时间安排和事件记录。"simplecalendar.js"是一款轻量级、易用且功能丰富的JavaScript日历插件,专为开发者设计,用于快速集成到各种Web...

    日历calendar详细代码

    1. **实例化**:由于`Calendar`是抽象类,不能直接实例化,通常我们通过`Calendar.getInstance()`静态方法获取一个具体的`Calendar`实例,如`GregorianCalendar`。 2. **设置日期**:`set`方法用于设置年、月、日、...

    java 中Calendar日期格式的转换

    由于`Calendar`类是抽象的,我们不能直接实例化它,而是通过其静态方法`getInstance()`获取一个默认的`Calendar`对象,或者通过其具体子类如`GregorianCalendar`创建实例。例如: ```java Calendar calendar = ...

    calendar 日历显示列表

    公历是我们日常生活中普遍使用的国际标准日期系统,而农历则在中国传统节日和特定文化活动中发挥着重要作用。 2. **年份选择**:用户可以自由选择查看不同年份的日历,这不仅方便回顾过去,也为计划未来提供了便利...

    Calendar和Date的转化

    ### Calendar和Date的转化 在Java编程语言中,`Calendar`和`Date`是处理日期和时间的重要类。为了更好地理解和使用这两个类之间的转换...希望本文能帮助你更好地理解如何在Java程序中使用这些重要的日期时间处理工具。

    小程序插件 vue Calendar 日历

    【小程序插件 Vue Calendar 日历】是专门为Vue.js框架设计的一款高效、易用的日历组件,适用于微信小程序开发。此组件充分利用了Vue.js的特性,提供了丰富的功能和自定义选项,使得开发者能够快速构建具有日历展示...

    Date与Calendar详解

    `Calendar`类是抽象的,不能直接实例化,但提供了`getInstance()`静态方法来获取其具体子类(通常是`GregorianCalendar`)的实例。例如: ```java import java.util.Calendar; public class CalendarExample { ...

Global site tag (gtag.js) - Google Analytics