java Data日期类

System.currentTimeMillis()

获取1970年1月1日 00时00分00秒 000毫秒(定义为时间原点) 到当前的毫秒数.返回 long类型的数值,可以先后定义两个值,获取程序运行前和运行后的毫秒时间数,简单相减就可以计算程序段的运行时间

Date类,java.util.Date

两个构造方法,Date调用的还是System.currentTimeMillis()方法

public Date()返回当前时间

public Date(long date)返回从1970年1月1日 8时00分00秒 000毫秒加上传入的毫秒数 所能得到的时间

getTime()方法,返回Date对象偏离时间原点的毫秒数.

​

               //无参构造方法,创建当前时间的Date对象
                 Date d1 = new Date();
		System.out.println(d1);
                //传入long类型的毫秒数,创建偏离时间原点的Date对象
		Date d2 = new Date(3600000L);
		System.out.println("偏离距时间原点1小时后的时间" + d2);
                //传入long类型的0L,创建时间原点的日期对象
		Date d3 = new Date(0L);
		System.out.println("时间原点" + d3);

out:
Tue Nov 13 15:19:06 CST 2018
偏离距时间原点1小时后的时间Thu Jan 01 09:00:00 CST 1970
时间原点Thu Jan 01 08:00:00 CST 1970
分析,为什么打印出的时间原点是8点而不是0点,因为中国电脑时区设置为东8区

[点击并拖拽以移动]
​

SimpleDateFormat类,java.text.SimpleDateFormat

构造方法

 public SimpleDateFormat() {
//无参构造方法
        this("", Locale.getDefault(Locale.Category.FORMAT));
        applyPatternImpl(LocaleProviderAdapter.getResourceBundleBased().getLocaleResources(locale)
                         .getDateTimePattern(SHORT, SHORT, calendar));
    }

public SimpleDateFormat(String pattern)
    {
//有参构造方法,传入要格式化成的形式比如"yyyy-MM-dd hh-mm-ss SSS"
        this(pattern, Locale.getDefault(Locale.Category.FORMAT));
    }

有参构造方法如果后面要用到parse(String str)函数解析日期字符串,那传入的参数必须和日期字符串格式相同,否则报错

如果不用解析日期字符串,只对Date对象操作,构造方法中的格式只要正确即可

日期格式可以自定义
 

yyyy代表年

MM代表月

dd代表日

hh代表小时12小时制,HH代表24小时制

mm代表分钟

ss代表秒

SSS代表三位毫秒,也可以是多位

format(Date date)方法可以将传入的日期对象转换为指定的形式,返回字符串类型,如下

                SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
		Date d4 = new Date();
		System.out.println(d4);//Tue Nov 13 13:36:51 CST 2018
		String datenow4 = sd.format(d4);
		System.out.println(datenow4);//2018-11-13 13:36:51 299

parse(String str)可以将字符串类型的日期转换成Date类型,返回Date类型,但Date类型的格式是外国国家那种样式的

public class DateTest02 {

	public static void main(String[] args) {
		//定义字符串类型日期
		String s1 = "2019-12-9 3:15:24";
		// 解析字符串类型日期时,格式必须与字符串类型格式一样,否则报错
		SimpleDateFormat sd1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		// parse函数解析字符串格式的日期,要处理异常,抛出或者捕获,返回的日期是外国国家的形式
		Date s1date = new Date();// 要先初始化,否则try语句没赋值后面就不能调用,会报错
		try {
			s1date = sd1.parse(s1);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(s1date);
		// 可以通过format格式化成自己要的样式
		String s1dateStr = sd1.format(s1date);
		System.out.println(s1dateStr);
	}

}
out:
Mon Dec 09 03:15:24 CST 2019
2019-12-09 03:15:24

 Calendar类 java.util.Calendar,抽象类,提供操作日期的方法

getInstance()静态方法 该方法返回Calendar类的子类对象,Calendar是抽象类不能创建对象,Canledar有很多子类,因为不同国家和地区有不同的日历算法,jdk中Calendar类的getInstance方法源码如下:

/**
 * Gets a calendar using the default time zone and locale. The
 * <code>Calendar</code> returned is based on the current time
 * in the default time zone with the default locale.
 *
 * @return a Calendar.
 */
public static Calendar getInstance()
{
    Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT));
    cal.sharedZone = true;
    return cal;
}

get()成员方法,接收Calendar类的YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE、SECOND等日历字段

getTime()向Date类转换

public class CalendarTest01 {

	public static void main(String[] args) {
		//获取Calendar的子类对象
		Calendar c1 = Calendar.getInstance();
		//转换成日期类
		Date date = c1.getTime();
		System.out.println(date);
		//创建格式化日期对象,传入格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		//格式化日期,返回字符串类型
		String datenow = sdf.format(date);
		System.out.println(datenow);
		//返回今天是当前月的第几天
		int i = c1.get(Calendar.DAY_OF_MONTH);
		System.out.println(i);
		//返回今天是这周的第几天,按照西方国家来算,周日是第一天
		int j = c1.get(Calendar.DAY_OF_WEEK);
		System.out.println(j);
	}
}
out:
Tue Nov 13 14:25:36 CST 2018
2018-11-13 02:25:36
13
3

 setTime(Date date)设置Calendar实例为给定日期

add()

set()

Calendar类包含了处理日期的很多方法,有时间再补上

例子:

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

//编写代码获取2008年8月8日是星期几?
public class DateTest03 {
	public static void main(String[] args) {
		//创建字符串日期
		String strDate = "2008年8月8日";
		//创建Data对象
		Date date = new Date();
		//创建格式化对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
		//得到Calendar子类对象
		Calendar c1 = Calendar.getInstance();

		try {
			//将字符串日期格式化成Date类型
			date = sdf.parse(strDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		//给Calendar子类对象设置时间
		c1.setTime(date);
		//返回设置的时间是周几
		int i = c1.get(Calendar.DAY_OF_WEEK);
		System.out.println(i);//6,星期五,按照第一天是周日来算的

	}
}
out:
6
//算一下你来到这个世界多少天
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest04 {
	public static void main(String[] args) {
		// 获取当前时间,以毫秒来计算
		Date now = new Date();
		//设置生日字符串
		String birth = "1992-01-20";
		Date birthdat = new Date();
		//创建格式化对象,传入字符串格式要和上面的生日字符串格式一致
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
		try {
			//解析生日字符串返回Date类型
			birthdat = sd.parse(birth);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//获取当前日期偏离1970-1-1的毫秒数
		long nowmillionSeconds = now.getTime();
		//获取生日日期偏离1970-1-1的毫秒数
		long birthmillionSeconds = birthdat.getTime();
		long time = nowmillionSeconds - birthmillionSeconds;
		//除以每天的毫秒数得到两者相距天数
		System.out.println(time / 24 / 60 / 60 / 1000);
		
	}
}

参考:http://www.monkey1024.com/javase/505

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值