Java - 日期时间

util Date

现在已经不建议使用了,因为不易实现国际化,在JDK1.1开始,应该使用java.util.Calendar(抽象类)来代替
父类
	java.lang.Object
子类
	java.sql.Date
	java.sql.Time
	java.sql.Timestamp
构造方法
	Date()
		其实此构造器并不是没有参数的,底层初始化的时候是调用了兄弟构造器
		public Date() {
	    	this(System.currentTimeMillis());
		}
		传入的参数是自1970年1月1日0:0:0 GTM 到现在经过的毫秒数,也就是当前时间
	Date(long date)	自1970年1月1日0:0:0 GTM 经过date毫秒数的时间

util Date常用方法

String toString() 
	把此对象转换为以下形式的字符串格式为dow mon dd hh:mm:ss zzz yyyy
	dow 	是一周中的某一天 Sun,Mon,Tue,Wed,Thu,Fri,Sat
	mon 	是月份 Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
	dd 		是一月中的某一天 01 至 31
	hh 		是一天中的小时 00 至 23
	mm 		是小时中的分钟 00 至 59
	ss 		是分钟中的秒数 00 至 61
	zzz 	是时区 
	yyyy 	是年份
void setTime(long time)
	自1970年1月1日0:0:0 GTM 经过date毫秒数的时间
long getTime()
	返回自1970年1月1日0:0:0 GTM 到当前时间的毫秒数
boolean equals(Object obj)
	比较两个日期是否相等,比较的是两个日期的getTime()
int compareTo(Date anotherDate)
	比较两个日期的顺序,两个日期等于返回0
	date小于anotherDate,返回-1
	date大于anotherDate,返回1
	public int compareTo(Date anotherDate) {
		long a = this.getTime();
		long b = anotherDate.getTime();
		return a < b ? -1 : (a == b ? 0 : 1);
	}
boolean after(Date anotherDate)
	date大于anotherDate返回false
	date小于anotherDate返回true
boolean before(Date anotherDate)
	date大于anotherDate返回true
	date小于anotherDate返回false

案例

package com.itlwc;

import java.util.Date;

public class Test {
	public static void main(String[] args) {
		MyDate d1 = new MyDate(100);
		MyDate d2 = new MyDate(200);
		
		System.out.println(d1.compareTo(d2));
		System.out.println(d1.after(d2));
		System.out.println(d1.before(d2));
		System.out.println(d1.equals(d2));
	}
}

class MyDate extends Date {
	private static final long serialVersionUID = 1L;

	public MyDate() {
		this(System.currentTimeMillis());
	}

	public MyDate(long date) {
		super(date);
	}

	@Override
	public int compareTo(Date anotherDate) {
		long a = this.getTime();
		long b = anotherDate.getTime();
		return a < b ? -1 : (a == b ? 0 : 1);
	}

	@Override
	public boolean after(Date anotherDate) {
		return this.getTime() > anotherDate.getTime();
	}

	@Override
	public boolean before(Date anotherDate) {
		return this.getTime() < anotherDate.getTime();
	}

	@Override
	public boolean equals(Object obj) {
		return obj instanceof Date && this.getTime() == ((Date) obj).getTime();
	}
}
/*
打印结果:
	-1
	false
	true
	false
*/

sql Date

它允许JDBC将毫秒值标识为SQL DATE值
构造器
	Date(long date) 使用给定毫秒时间值构造Date对象
常用方法
	static Date valueOf(String s) 使用格式 yyyy-mm-dd

sql Time

它允许JDBC将该类标识为SQL TIME值
构造器
	Time(long time)
		使用毫秒时间值构造Time对象
常用方法
	static Time valueOf(String s)
		使用格式 hh:mm:ss

sql Timestamp

它允许JDBC将毫秒值标识为SQL TIMESTAMP值
构造器
	Timestamp(long time)
		使用毫秒时间值构造Timestamp对象
常用方法
	static Timestamp valueOf(String s) 
		使用格式	yyyy-mm-dd hh:mm:ss.fffffffff
	int getNanos()
		获取Timestamp对象的纳秒
	void setNanos(int n)
		设置Timestamp 对象的纳秒

util Date,sql Date,sql Time,sql Timestamp区别

java.util.Date		日期格式为:年月日时分秒 
java.sql.Date		日期格式为:年月日(只存储日期数据不存储时间数据) 
java.sql.Time		日期格式为:时分秒 
java.sql.Timestamp	日期格式为:年月日时分秒纳秒(毫微秒)

案例

package com.itlwc;

public class Test {
	public static void main(String[] args) {
		java.sql.Date date = java.sql.Date.valueOf("2013-05-24");
		System.out.println(date);
		java.sql.Time time = java.sql.Time.valueOf("14:06:27");
		System.out.println(time);
		java.sql.Timestamp timestamp = java.sql.Timestamp
				.valueOf(("2013-05-24 14:06:27.186"));
		System.out.println(timestamp);
	}
}
/*
打印结果:
	2013-05-24
	14:06:27
	2013-05-24 14:06:27.186
*/

日期类型之间的转换

将字符串日期转型为util Date

package com.itlwc;

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

public class Test {
	public static void main(String[] args) {
		String str = "1987-04-09";
		getUtilDate(str);
	}

	public static Date getUtilDate(String str) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
}

将字符串日期转型为sql Date

package com.itlwc;

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Test {
	public static void main(String[] args) {
		String str = "1987-04-09";
		Test.getSqlDate(str);
	}

	public static java.sql.Date getSqlDate(String str) {
		// 先转型为java.util.Date
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date = null;
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		// 在转型为java.sql.Date
		java.sql.Date sqlDate = new java.sql.Date(date.getTime());
		return sqlDate;
	}
}

将字符串日期转型为sql Timestamp

package com.itlwc;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Test {
	public static void main(String[] args) {
		String str = "1987-04-09";
		Test.getTimestamp(str);
	}

	public static Timestamp getTimestamp(String str) {
		// 先转型为java.util.Date
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date = null;
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		// 在转型为java.sql.Timestamp
		Timestamp ts = new Timestamp(date.getTime());
		return ts;
	}
}

将util Date转型为字符串的日期

package com.itlwc;

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

public class Test {
	public static void main(String[] args) {
		Test.getString();
	}

	public static String getString() {
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String str = sdf.format(date);
		return str;
	}
}

将sql Date转型为字符串的日期

package com.itlwc;

public class Test {
	public static void main(String[] args) {
		Test.getString();
	}

	public static String getString() {
		java.sql.Date d = new java.sql.Date(System.currentTimeMillis());
		return d.toString();
	}
}

将sql Timestamp转型为字符串

package com.itlwc;

import java.sql.Timestamp;
import java.util.Date;

public class Test {
	public static void main(String[] args) {
		Test.getString();
	}

	public static String getString() {
		java.util.Date date = new Date();
		Timestamp ts = new Timestamp(date.getTime());
		return ts.toString();
	}
}

util Calendar

Calendar 类是一个抽象类,一般使用GregorianCalendar子类

创建2013年5月27日10:40:59秒

new GregorianCalendar(2013,4,27,10,40,59);
或者
new GregorianCalendar(2013,Calendar.MAY,27,10,40,59);
或者
Calendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR,2013);
cal.set(Calendar.MONTH,Calendar.MAY);
cal.set(Calendar.DAY_OF_MONTH,27);
cal.set(Calendar.DAY_OF_WEEK,2);
cal.set(Calendar.HOUR_OF_DAY,10);
cal.set(Calendar.MINUTE,40);
cal.set(Calendar.SECOND,59);

创建当前时间

Calendar cal = new GregorianCalendar();
System.out.println("年: " + cal.get(Calendar.YEAR));
System.out.println("月: " + cal.get(Calendar.MONTH));
System.out.println("本年第: " + cal.get(Calendar.DAY_OF_YEAR)+" 天");
System.out.println("日: " + cal.get(Calendar.DATE));
System.out.println("日: " + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("本年第 " + cal.get(Calendar.WEEK_OF_YEAR) + " 个星期");
System.out.println("本月第: " + cal.get(Calendar.WEEK_OF_MONTH) + " 个星期");
System.out.println("本周第: " + cal.get(Calendar.DAY_OF_WEEK) + " 天");
System.out.println("时: " + cal.get(Calendar.HOUR));
System.out.println("时: " + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分: " + cal.get(Calendar.MINUTE));
System.out.println("秒: " + cal.get(Calendar.SECOND));
System.out.println("毫秒: " + cal.get(Calendar.MILLISECOND));

字段摘要

上午,下午
	System.out.println(Calendar.AM);
	System.out.println(Calendar.PM);
	System.out.println(Calendar.AM_PM);
星期
	System.out.println("星期日: " + Calendar.SUNDAY);
	System.out.println("星期一: " + Calendar.MONDAY);
	System.out.println("星期二: " + Calendar.TUESDAY);
	System.out.println("星期三: " + Calendar.WEDNESDAY);
	System.out.println("星期四: " + Calendar.THURSDAY);
	System.out.println("星期五: " + Calendar.FRIDAY);
	System.out.println("星期六: " + Calendar.SATURDAY);
月份
	System.out.println("一月份: " + Calendar.JANUARY);
	System.out.println("二月份: " + Calendar.FEBRUARY);
	System.out.println("三月份: " + Calendar.MARCH);
	System.out.println("四月份: " + Calendar.APRIL);
	System.out.println("五月份: " + Calendar.MAY);
	System.out.println("六月份: " + Calendar.JUNE);
	System.out.println("七月份: " + Calendar.JULY);
	System.out.println("八月份: " + Calendar.AUGUST);
	System.out.println("九月份: " + Calendar.SEPTEMBER);
	System.out.println("十月份: " + Calendar.OCTOBER);
	System.out.println("十一月份: " + Calendar.NOVEMBER);
	System.out.println("十二份: " + Calendar.DECEMBER);
	System.out.println("十三份: " + Calendar.UNDECIMBER);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值