Bootstrap

Java 日期类 Date

目录

构造函数:

常用方法:

使用DateFormat格式化日期

使用SimpleDateFormat格式化日期

 日期与日期格式字符串的相互转化:

Calendar类

Calendar与Date都是表示日期的工具类,他们之间可以相互转换。

Calendar类提供的常用方法:


构造函数:

Date(int year,int month ,int day)已经过时

常用Date(long date):从标准时间起指定时间的毫秒数

标准时间:1970-1-1-8:00

常用方法:

Date日期和毫秒的相互转换:

1.日期获取毫秒值

Date date3 = new Date();

long time = date3.getTime();

2.把一个毫秒值转换为Date

  1. 构造方法
  2. setTime(long time)方法

使用DateFormat格式化日期

DateFormat是一个抽象类,它也提供了几个工厂方法用于获取DateFormat对象。返回的都是DateFormat对象的子类实例,是同一个类型的实例。

  • getDateInstance():返回一个日期格式器,只对日期进行格式化。
  • getTimeInstance():返回一个时间格式器,只对时间进行格式化。
  • getDateTimeInstance():返回一个日期、时间格式器,既对时间又对日期进行格式化。
  • getInstance():返回一个默认的系统相关的日期、时间格式器。

举例:

public static void main(String[] args)  throws Exception{

DateFormat format = DateFormat.getInstance();

System.out.println(format.getClass());

format = DateFormat.getDateInstance();

System.out.println(format.getClass());

format = DateFormat.getTimeInstance();

System.out.println(format.getClass());

}

输出:

 

虽然返回的都是同一个对象类型的实例,但是根据不同的工厂方法,返回的对象在格式化时间对象时,处理不同部分的信息。

使用SimpleDateFormat格式化日期

SimpleDateFormat是DateFormat的子类,是一种更简单的日期格式,以我们指定的格式对日期进行格式化。

举例:

 public static void main(String[] args) throws Exception{
            Date date = new Date();
            SimpleDateFormat simple = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            System.out.println(simple.format(date));
        simple = new SimpleDateFormat("yyyy/MM/dd");
        System.out.println(simple.format(date));
    }

输出:

 日期与日期格式字符串的相互转化:

 字符串转换成日期:parse()

日期转字符串:format()

public static void main(String[] args)  throws Exception{
		// Date -- String
		// 创建日期对象
		Date d = new Date();
		// 给定模式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		String s = sdf.format(d);
		System.out.println(s);
		
		//String -- Date
		String str = "2008-12-13 12:12:12"; 
		//在把一个字符串解析为日期的时候,请注意格式必须和给定的字符串格式匹配
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date dd = sdf2.parse(str);
		System.out.println(dd);
	}

 

注意:yyyy 、MMddHHmmss 均严格区分大小写。否则会带来不可预知的问题。

具体用法如下:

字母    含义                            示例

y                

Year1996;96             哪一年
M Month in year07       一年中的哪一月
m  Minute in hour    30       一个小时中的第几分钟
wWeek in year    27       一年中的第几个星期
WWeek in month2         一个月中的第几个星期
DDay in year189     一年中的第几天
d Day in month10       一个月中的第几天
HHour in day (0-23)

0         一天中的第几个小时(24小时制)

hHour in am/pm (1-12)         

12        一天中上午、下午的第几个小时(12小时制)

SMillisecond                 

978                 毫秒数

sSecond in minute

55                  一分钟的第几秒

Calendar类

Date类的问题:

  1. 无法实现国际化。
  2. 不同属性使用了前后矛盾的偏移量,比如月份和小时都是从0开始,月份中的天数则是从1开始的,年又是从1900开始。

Calendar是一个抽象类,用于表示日历。因为Date类在设计上存在一些缺陷,所以Java提供Calendar类来更好的处理日期和时间。

Calendar类不能直接创建,可以通过类方法来创建一个Calendar的子类,Java本身提供了GregorianCalendar子类,通过getInstance()方法返回默认时区和语言环境获得一个日历。返回的实例就是Java提供的默认子类

public static void main(String[] args)  throws Exception{
		Calendar cal = Calendar.getInstance();
		System.out.println(cal.getClass());  //class java.util.GregorianCalendar
	}

Calendar与Date都是表示日期的工具类,他们之间可以相互转换。

举例:

public static void main(String[] args)  throws Exception{

Calendar cal = Calendar.getInstance();

Date date = cal.getTime();

System.out.println(date);

Calendar cale = Calendar.getInstance();

cale.setTime(date);

}

Calendar类提供的常用方法:

  • void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • int get(int field):返回指定日历字段的值。
  • int getActualMaximum(int field):返回指定日历字段的可能拥有的最大值。
  • int getActualMinimum(int field):返回指定日历字段的可能拥有的最小值。
  • void roll(int field,int amout):与add方法相似,区别在于超过该字段的最大范围时,也不会向上一个字段进位。
  • void set(int field,int value):将给定的日历字段设置为给定值。
  • void set(int year,int month,int date):设置Calendar对象的年、月、日3个字段值。
  • void set(int year,int month,int date,int hourOfDay,int minute,int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值。
    public static void main(String[] args) throws Exception {
    		Calendar cal = Calendar.getInstance();
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		System.out.println("==================================");
    		System.out.println(sdf.format(cal.getTime()));
    		System.out.println(cal.get(Calendar.YEAR));
    		cal.add(Calendar.MONTH, 12);
    		System.out.println(cal.get(Calendar.YEAR));
    		System.out.println("=========================");
    		cal = Calendar.getInstance();
    		System.out.println(cal.get(Calendar.YEAR));
    		cal.roll(Calendar.MONTH, 12);
    		System.out.println(cal.get(Calendar.YEAR));
    		System.out.println("==================================");
    		System.out.println(cal.getActualMaximum(Calendar.MONTH)); // 11
    		System.out.println(cal.getActualMinimum(Calendar.MONTH)); // 0
    		System.out.println("==================================");
    		System.out.println(cal.get(Calendar.MONTH));
    		System.out.println(cal.get(Calendar.DAY_OF_MONTH));
    		System.out.println(cal.get(Calendar.DAY_OF_WEEK));
    		System.out.println(cal.get(Calendar.WEEK_OF_MONTH));
    		System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
    
    		System.out.println("==================================");
    		cal.set(2018, 0, 1, 1, 1);
    		System.out.println(sdf.format(cal.getTime()));
    
    		/*
    		 * JANUARY = 0, FEBRUARY = 1, MARCH = 2, APRIL = 3, MAY = 4, JUNE = 5,
    		 * JULY = 6, AUGUST = 7, SEPTEMBER = 8, OCTOBER = 9, NOVEMBER = 10,
    		 * DECEMBER = 11, UNDECIMBER = 12
    		 */
    		System.out.println(cal.get(Calendar.MONTH));
    		/* 从1开始 */
    		System.out.println(cal.get(Calendar.DAY_OF_MONTH));
    		/*
    		 * SUNDAY = 1; 星期天 MONDAY = 2; 星期一 TUESDAY = 3; WEDNESDAY = 4; THURSDAY
    		 * = 5; FRIDAY = 6; SATURDAY = 7; JANUARY = 0; 星期六
    		 */
    		System.out.println(cal.get(Calendar.DAY_OF_WEEK));
    		/* 从1开始 */
    		System.out.println(cal.get(Calendar.WEEK_OF_MONTH));
    		/* 从1开始 */
    		System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
    	}

     

;