java关于日历的运算

来源:互联网 发布:软件测试工程师的出路 编辑:程序博客网 时间:2024/05/16 12:07

蔡勒公式


蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。

    W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1、

符号的意义:

w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六

c:世纪减1(年份前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,

比如2003年1月1日要看作2002年的13月1日来计算)

d:日

不过,蔡勒公式只适合于1582年(中国明朝万历十年)10月15日之后的情形。

c代码:#include <stdio.h>int main(){int year,month,day;while(scanf("%d%d%d",&year,&month,&day)!=EOF){int i,j,k;int c=year/100;int y=year-c*100;int week=int(c/4)-2*c+int(y+y/4)+int(13*(month+1)/5)+day-1;while(week<0){ week+=7; }week%=7; switch(week){case 1: printf("Monday\n"); break;case 2: printf("Tuesday\n"); break;case 3: printf("Wednesday\n"); break;case 4: printf("Thursday\n");break;case 5: printf("Friday\n"); break;case 6: printf("Saturday\n");break;case 0: printf("Sunday\n"); break;}}return 0;}

CCalendar 类的解析:

Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。

而 Calendar.DAY_OF_WEEK 定义和值如下:

Calendar.SUNDAY = 1
     Calendar.MONDAY = 2
     Calendar.TUESDAY = 3
     Calendar.WEDNESDAY = 4
     Calendar.THURSDAY = 5
     Calendar.FRIDAY = 6
     Calendar.SATURDAY = 7

package demo;    import java.util.Date;  import java.text.SimpleDateFormat;  import java.text.DateFormat;  import java.text.ParseException;  import java.util.Calendar;    public class Test  {    public Test()    {    }      public static void main(String[] args)    {      // 字符串转换日期格式      // DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      // 接收传入参数      // String strDate = args[1];      // 得到日期格式对象      // Date date = fmtDateTime.parse(strDate);        // 完整显示今天日期时间      String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());      System.out.println(str);        // 创建 Calendar 对象      Calendar calendar = Calendar.getInstance();        try      {        // 对 calendar 设置时间的方法        // 设置传入的时间格式        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s");        // 指定一个日期        Date date = dateFormat.parse("2013-6-1 13:24:16");        // 对 calendar 设置为 date 所定的日期        calendar.setTime(date);          // 按特定格式显示刚设置的时间        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());        System.out.println(str);      }      catch (ParseException e)      {        e.printStackTrace();      }        // 或者另一種設置 calendar 方式      // 分別爲 year, month, date, hourOfDay, minute, second      calendar = Calendar.getInstance();      calendar.set(2013, 1, 2, 17, 35, 44);      str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());      System.out.println(str);        // Calendar 取得当前时间的方法      // 初始化 (重置) Calendar 对象      calendar = Calendar.getInstance();      // 或者用 Date 来初始化 Calendar 对象      calendar.setTime(new Date());        // setTime 类似上面一行      // Date date = new Date();      // calendar.setTime(date);        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());      System.out.println(str);        // 显示年份      int year = calendar.get(Calendar.YEAR);      System.out.println("year is = " + String.valueOf(year));        // 显示月份 (从0开始, 实际显示要加一)      int month = calendar.get(Calendar.MONTH);      System.out.println("nth is = " + (month + 1));        // 本周几      int week = calendar.get(Calendar.DAY_OF_WEEK);      System.out.println("week is = " + week);        // 今年的第 N 天      int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);      System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR);        // 本月第 N 天      int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);      System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));        // 3小时以后      calendar.add(Calendar.HOUR_OF_DAY, 3);      int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);      System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);        // 当前分钟数      int MINUTE = calendar.get(Calendar.MINUTE);      System.out.println("MINUTE = " + MINUTE);        // 15 分钟以后      calendar.add(Calendar.MINUTE, 15);      MINUTE = calendar.get(Calendar.MINUTE);      System.out.println("MINUTE + 15 = " + MINUTE);        // 30分钟前      calendar.add(Calendar.MINUTE, -30);      MINUTE = calendar.get(Calendar.MINUTE);      System.out.println("MINUTE - 30 = " + MINUTE);        // 格式化显示      str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());      System.out.println(str);        // 重置 Calendar 显示当前时间      calendar.setTime(new Date());      str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());      System.out.println(str);        // 创建一个 Calendar 用于比较时间      Calendar calendarNew = Calendar.getInstance();        // 设定为 5 小时以前,后者大,显示 -1      calendarNew.add(Calendar.HOUR, -5);      System.out.println("时间比较:" + calendarNew.compareTo(calendar));        // 设定7小时以后,前者大,显示 1      calendarNew.add(Calendar.HOUR, +7);      System.out.println("时间比较:" + calendarNew.compareTo(calendar));        // 退回 2 小时,时间相同,显示 0      calendarNew.add(Calendar.HOUR, -2);      System.out.println("时间比较:" + calendarNew.compareTo(calendar));    }  }  


Java正确获取星期Calendar.DAY_OF_WEEK



Calendar now = Calendar.getInstance();  //一周第一天是否为星期天  boolean isFirstSunday = (now.getFirstDayOfWeek() == Calendar.SUNDAY);  //获取周几  int weekDay = now.get(Calendar.DAY_OF_WEEK);  //若一周第一天为星期天,则-1  if(isFirstSunday){      weekDay = weekDay - 1;      if(weekDay == 0){          weekDay = 7;      }  }  //打印周几  System.out.println(weekDay);    //若当天为2014年10月13日(星期一),则打印输出:1  //若当天为2014年10月17日(星期五),则打印输出:5  //若当天为2014年10月19日(星期日),则打印输出:7  

星期日为一周的第一天SUN MONTUE WED THU FRI SAT
DAY_OF_WEEK返回值 1 2 3 4 5 6 7
星期一为一周的第一天 MON TUE WED THU FRI SAT SUN
DAY_OF_WEEK返回值 1 2 3 4 5 6 7

在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因
Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
看下表的返回值

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 丧具 丧句 丧短句 丧系人格短句 丧句短句 丧句配图 丧句语录 50句短丧句子 虐心丧句图片 丧句图片 丧话短句 丧句子短句 社会丧句短句 很丧的句子短句 生活丧句 45句超丧的英文句子 很丧的短句 网络丧句 特别丧的短句 伤感丧句 丧句大全 丧器 丧病 丧句子 丧图片 丧病大学 很丧的句子 如丧考妣 暗黑系甜丧风服装 暗黑系甜丧风 很丧的图片 很丧图片 丧的句子 丧考妣 珠峰拥堵多人丧生 丧图 丧潮图 抖音丧图 丧文字配图 丧背景图 海绵宝宝丧图