一个Java门户!
当前位置: AJava主页 > 技术教程 > Java基础 >
资源搜索
技术交流QQ群-欢迎你加入
技术交流MSN群-欢迎你加入
栏目分类
JSP/Servlet
开源技术
> Java基础
软件工具
图形相关
服务器
网络编程
手机编程
MYSQL
MSSQL
Oracle
数据库
开发模式
设计模式
安全管理
XML
HTML
CSS
JavaScript
AJAX
Java认证考试
SOA/ESB/JMS
UML
项目管理
EJB
软件测试
Flex
其他
本类排行
JAVA内存溢出解析
JAVA判断文件是否存在,不存在则创建
JDK 1.5 使用java.util.concurrent开发并发应用
java日期比较
java终止线程的方法
深入理解JAVA事件机制
java 编程常用英语单词 解释
Java基础-学习使用Annotation注解对象
jar包在CMD命令窗口中运行
ubuntu 9.04中安装JDK 6和Eclipse
本类推荐
OOP: 继承以及多态
使用Java开始面向对象的编程
再看Java平台无关性
HTML、Swing还是XML,Java客户端工具选择?(四)
第四讲 窗口设计(二)
Servlets,JSP和Servlet Engines入门
破除java神话之二:参数是传址的(翻译)
如何在Java中实现远程方法调用
Java虚拟机
学习使用 Manifest
Calendar 类的setFirstDayOfWeek 方法详解
时间:2009-11-16 22:27    来源:未知    作者:CutDeer's Blog
核心提示:关于JAVA的java.util.Calendar 类里面的setFirstDayOfWeek()方法,我相信很多朋友都像我一样,误解了.认为设置了setFirstDayOfWeek(Calendar.MONDAY),再通过get (Calendar.DAY_OF_WEEK),如果是星期一的时候,就会返回一.这样想是错误 的.不管你把setFirstDayOfW

关于JAVA的java.util.Calendar 类里面的setFirstDayOfWeek()方法,我相信很多朋友都像我一样,误解了.认为设置了setFirstDayOfWeek(Calendar.MONDAY),再通过get (Calendar.DAY_OF_WEEK),如果是星期一的时候,就会返回一.这样想是错误 的.不管你把setFirstDayOfWeek()设置为星期几,get (Calendar.DAY_OF_WEEK)都不是改变的.如果是星期一的话,永远返回都是2,对应的常量字锻Calendar.MONDAY是2.也就是说是星期一(MONDAY).

  那setFirstDayOfWeek有什么用呢,一个无用的方法?大家先看看官方的java.util.Calendar 类的帮助说明,解说如下:

第一个星期
Calendar 使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 1 到 7)。这些数字取自构造 Calendar 时的语言环境资源数据。还可以通过为其设置值的方法来显式地指定它们。

在设置或获得 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定一个月或一年的第一个星期,以此作为参考点。一个月或一年的第一个星期被确定为开始于 getFirstDayOfWeek() 的最早七天,它最少包含那一个月或一年的 getMinimalDaysInFirstWeek() get() 返回的标准化编号方式可能有所不同。例如,特定 Calendar 子类可能将某一年第 1 个星期之前的那个星期指定为前一年的第 n 个星期。 天数。第一个星期之前的各星期编号为 …、-1、0;之后的星期编号为 2、3、…。注意,

不知道有几位朋友们看懂了,官方的文档说的太深奥了,我硬是没有看懂,又没有示例,最后到网上找了很久的资料,才明白是什么意思.大家看我写的示例源码,我想应该就会明白setFirstDayOfWeek()方法的作用了


示例源码:

  1. package cn.eplato.test;   
  2.   
  3. import java.util.Calendar;   
  4. import java.util.GregorianCalendar;   
  5.   
  6. public class Test {   
  7.   
  8.  static final String[] weeks = new String[]{"星期天","星期一","星期二","星期三","星期四","星期五","星期六",};   
  9.  /**  
  10.   * @param args  
  11.   */  
  12.  public static void main(String[] args) {   
  13.   // TODO Auto-generated method stub   
  14.   Calendar cale = new GregorianCalendar(2009,0,31);   
  15.   System.out.println(cale.getTime().toLocaleString());   
  16.   System.out.println("FirstDayOfWeek\tMinimalDaysInFirstWeek\tweek");   
  17.   for (int i = 1; i <= 7; i++) {   
  18.    cale.setFirstDayOfWeek(i);//1为星期天,7为星期六   
  19.    for (int j = 1; j <= 7; j++) {   
  20.     cale.setMinimalDaysInFirstWeek(j);   
  21.     System.out.println(weeks[(i-1)]+"\t"+j+"\t"+cale.get(Calendar.WEEK_OF_MONTH));   
  22.    }   
  23.   
  24.   }   
  25.  }   
  26.   
  27. }   
  1. package cn.eplato.test;     
  2.      
  3. import java.util.Calendar;     
  4. import java.util.GregorianCalendar;     
  5.      
  6. public class Test {     
  7.      
  8.     static final String[] weeks = new String[]{"星期天","星期一","星期二","星期三","星期四","星期五","星期六",};     
  9.     /**   
  10.      * @param args   
  11.      */     
  12.     public static void main(String[] args) {     
  13.         // TODO Auto-generated method stub     
  14.         Calendar cale = new GregorianCalendar(2009,0,31);     
  15.         System.out.println(cale.getTime().toLocaleString());     
  16.         System.out.println("FirstDayOfWeek\tMinimalDaysInFirstWeek\tweek");     
  17.         for (int i = 1; i <= 7; i++) {     
  18.             cale.setFirstDayOfWeek(i);//1为星期天,7为星期六     
  19.             for (int j = 1; j <= 7; j++) {     
  20.                 cale.setMinimalDaysInFirstWeek(j);     
  21.                 System.out.println(weeks[(i-1)]+"\t"+j+"\t"+cale.get(Calendar.WEEK_OF_MONTH));     
  22.             }     
  23.      
  24.         }     
  25.     }     
  26.      
  27. }     
  28.   

setFirstDayOfWeek的方法意思只对WEEK_OF_MONTH 与WEEK_OF_YEAR 有作用.

WEEK_OF_MONTH :当前Calendar日期对象是当前月的第几周.

WEEK_OF_YEAR :当前Calendar 日期对象是当前年的第几周.

程序是2009年1月31号为例子的.打印出当星期的第一天(FirstDayOfWeek)是星期天-星期六,年或月第一星期最少天数(MinimalDaysInFirstWeek)是1-7的所有组合的结果,也就是49个.

 


 Calendar200901

 

 

当setFirstDayOfWeek(1),星期第一天是星期天时.

1号前面的天数不算在第一周里面,如果是从星期天开始的,那么星期的最后一天是星期六.第一周只有3天.

第二周4号到10号.

第三周11号到17号.

第四周18号到24号.

第五周为25到31号.

如果设置setMinimalDaysInFirstWeek ()为1-3,那么2009年1月31号是这第月的第五周.

如果设置setMinimalDaysInFirstWeek ()为4-7,那么2009年1月31号是这第月的第四周,因为第一周不满4天,那就更加不满七天了.

相信大家都明白setFirstDayOfWeek方法的作用了吧.按照这样的算法,一个月可以算出6周来.比如一个月的1号为星期5,那么31号为星期日.setFirstDayOfWeek()为1,也就是一周从星期天开始,setMinimalDaysInFirstWeek 为1,也是就一天也算是1周.这样一个月六周就出来了.

转自:http://www.eplato.cn/149-java-calendar-class-methods-setfirstdayofweek-detailed.html

上一篇:Java偏向锁(Biased Locking) 实现原理
下一篇:log4j生成HTML格式日志配置文件
最新评论
看完了本页,要不要发表一下你的高论?
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
请不要发表和本页内容无关的言论。
联系我们 如果你喜欢本站,请告诉你的朋友,或在你的博客上连接AJava,非常感谢!
Copyright © 2004-2009 AJava.org 版权所有 粤ICP备08114841号