Home

韧桂

思考,总结

日期类之System_Date_SimpleDateFormat_Calendar类

日期类
1.java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
> 此方法适于计算时间差。

计算世界时间的主要标准有:
UTC(Universal Time Coordinated)
GMT(Greenwich Mean Time)
CST(Central Standard Time)

  1. java.util.Date 类 表示特定的瞬间,精确到毫秒
  • 构造方法:
    • Date( )使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
    • Date(long date)
  • 常用方法
    • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    • toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。

Date 类的API不易于国际化,大部分被废弃了,java.text.Simp leDateFormat 类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

  • 它允许进行格式化(日期文本)、解析(文本日期)
  • 格式化:
    • SimpleDateFormat() :默认的模式和语言环境创建对象
    • public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
    • public String format(Date date):方法格式化时间对象date
  • 解析:
    • public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
  1. java.util.Calendar(日历)类 Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
    • 获取Calendar实例的方法
    • 使用 Calendar.getInstance() 方法
    • 调用它的子类 GregorianCalendar 的构造器。
  • 一个Calendar的实例是系统时间的抽象表示,通过 get(int field) 方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
    • public void set(int field,int value)
    • public void add(int field,int amount)
    • public final Date getTime()
    • public final void setTime(Date date)
package eighteen;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.junit.Test;

/*
 * 与时间相关的类:
 * 1.System 类下的currentTimeMillis();
 * 2.Date类:java.util.Date 
 *    如何创建其实例;其下的方法:toString()、getTime()
 *    (以及其子类java.sql.Date)
 * 3.SimpleDateFormat类
 * 4.Calendar类
 */
public class TestDate {
	
	
	//日历:Calendar类   get()/add()/set()/Date getTime()/setTime(Date d)
	@Test
	public void test4(){
		Calendar c = Calendar.getInstance();
		int day = c.get(Calendar.DAY_OF_MONTH);//获取当天是当月的第几天
		System.out.println(day);
		
		c.add(Calendar.DAY_OF_MONTH, -2);//在第几天上进行加减操作
		day = c.get(Calendar.DAY_OF_MONTH);
		System.out.println(day);
		
		c.set(Calendar.DAY_OF_MONTH, 23);
		Date d = c.getTime();
		System.out.println(d);
		
	}
	
	
	/*
	 * “三天打渔两天晒网”  1990-01-01  XXXX-XX-XX 打渔?晒网?
	 */
	//返回date1与date2之间的天数,date1早于date2
	public int getDays(String date1,String date2) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date d1 = sdf.parse(date1);
		Date d2 = sdf.parse(date2);
		long milliTime = d2.getTime()-d1.getTime();
		return (int)milliTime/1000/3600/24 + 1;
	}
	
	@Test
	public void test3() throws ParseException{
		String str1 = "1990-01-01";
		String str2 = "1990-01-06";
		int dates = getDays(str1,str2);
		
		if(dates % 5 == 0 || dates % 5 == 4){
			System.out.println("晒网");
		}else{
			System.out.println("打渔");
		}
	}
	
	/*
	 * java.text.SimpleDateFormat类易于国际化
	 * 格式化:日期--->文本 使用SimpleDateFormat的format()方法
	 * 解析:文本--->日期 使用SimpleDateFormat的parse()方法
	 */
	@Test
	public void test2() throws Exception{
		//1.格式化1
		SimpleDateFormat sdf = new SimpleDateFormat();
		String date = sdf.format(new Date());
		System.out.println(date);//20-1-11 下午3:20
		//2.格式化2
		SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
		date = sdf1.format(new Date());
		System.out.println(date);//星期六, 11 一月 2020 15:20:36 +0800
		
		//3.解析:
		Date date1 = sdf.parse("20-1-11 下午3:20");
		System.out.println(date1);
		
		date1 = sdf1.parse("星期六, 11 一月 2020 15:20:36 +0800");
//		date1 = sdf1.parse("20-1-11 下午3:20");//格式不对
		System.out.println(date1);
	}
	//java.util.Date不易于国际化
	@Test
	public void test1(){
//		java.sql.Date d3 = new java.sql.Date(1578716715730L);
//		System.out.println(d3);//2456-03-08
		//创建一个Date的实例
		Date d1 = new Date();
		System.out.println(d1.toString());// Sat Jan 11 12:25:15 CST 2020
		System.out.println(d1.getTime());//返回时间的 long 型的值 1578716715730
		Date d2 = new Date(1578716715730L);
		System.out.println(d2);
	}
}	

韧桂 2020-01-10