您的位置:首页 > 编程语言 > Java开发

Java Calendar 类的时间操作

2017-09-23 17:18 393 查看
Java Calendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单。

演示了获取时间,日期时间的累加和累减,以及比较。

注意事项:

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


SimpleDateFormat 的格式定义


LetterDate or Time ComponentPresentationExamples
G
Era designatorText
AD
y
YearYear
1996
96
Y
Week yearYear
2009
09
M
Month in year (context sensitive)Month
July
Jul
07
L
Month in year (standalone form)Month
July
Jul
07
w
Week in yearNumber
27
W
Week in monthNumber
2
D
Day in yearNumber
189
d
Day in monthNumber
10
F
Day of week in monthNumber
2
E
Day name in weekText
Tuesday
Tue
u
Day number of week (1 = Monday, ..., 7 = Sunday)Number
1
a
Am/pm markerText
PM
H
Hour in day (0-23)Number
0
k
Hour in day (1-24)Number
24
K
Hour in am/pm (0-11)Number
0
h
Hour in am/pm (1-12)Number
12
m
Minute in hourNumber
30
s
Second in minuteNumber
55
S
MillisecondNumber
978
z
Time zoneGeneral
time zone
Pacific Standard Time
PST
GMT-08:00
Z
Time zoneRFC
822 time zone
-0800
X
Time zoneISO
8601 time zone
-08
-0800
-08:00
Java Calendar 演示代码如下:



[java] view
plain copy




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));  

  }  

}  

要计算时间差,可用 Calendar.getTimeInMillis() 取得两个时间的微秒级的时间差,再加以换算即可,比如获得相差天数,代码如下:

[java] view
plain copy




// 得微秒级时间差  

long val = calendarEnd.getTimeInMillis() - calendarBegin.getTimeInMillis();  

// 换算后得到天数  

long day = val / (1000 * 60 * 60 * 24);
 


问题:输入年,月,打印对应年月的日历。

  示例:

-------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------------------

 

问题分析:

    1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大多的手机的日历功能只能显示到1970年1月1日这一天;

    2,要想打印某年某月的日历,首先应该计算出这个月1号是星期几?

         解决1号是星期几?

        2.1: 先计算出年天数,即截至这一年1月1号的天数,用for循环,从1970年开始,闰年+366,平年+365;

        2.2: 计算出月天数,即截至本月1号的天数,用for循环,从1月份开始,算出月天数;

               2.1.1 :用到闰年判断,用switch来判断返回月天数;

        2.3: 用年天数加月天数,求得本月1号距离1970年1月1号的总天数,用总天数来判断本月1号是星期几;

    3, 判断本月的总天数(用到switch语句);

    4, 打印日历;

代码实现:

   一个函数实现打印printTitle();即实现固定的头部部分;

   实现print(参数1,参数2,参数3);即实现打印日历主题部分;

     参数1(计算总天数):计算年天数,计算月天数;

     参数2 传递年份;

     参数3 传递月份;

  判断闰年设置独立函数;

  总结:

      解决问题前一定要先分析问题,把大问题逐步分成小问题,理清逻辑,实现小问题的逻辑,整个问题就已经实现了百分之八十;

      自下而上,逐步实现,函数独立调用;

     

代码实现部分:

-----------------------------------------------------------------------------------------------

 



------------------------------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------





------------------------------------------------------------------------------------------------------



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 日历