11.5日期操作类(血干JAVA系类)

在程序的开发中经常会遇到日期类型的操作。Java对于日期的操作也提供了良好的支持,主要使用java.util包中DateCalendar,以及java.text包中的SimpleDateFormat实现。下面介 绍其具体用法。

11.5.1 Date 类

ate类是一个相对较为简单的操作类,在使用中直接使用java.util.Date类的构造方法并进行输出就可以得到一个完整的日期,构造方法定义如下:

public Date()

【例11.22】得到当前系统日期

package jiaqi;

import java.util.Date;

public class demo332_1 
{

	public static void main(String[] args) 
	{
		Date date = new Date();
		System.out.println(date);
	}
}

在这里插入图片描述

从 程 序 的 运 行 结 果 看 ,己经得到了系 统 的 当 前 日 期 , 但 是 对 于 此 日 期 ,可以发现格式并不是 很 符 合 平 常 看 到 的 格 式 , 而 且 , 现 在 的 时 间 也 不 能 准 确 地 精 确 到 毫 秒 , 要 想 按 照 用 户 自 己 的格式显示时间,可以使用Calendar类完成操作或者利用SimpleDateFormat类进行格式化显示。

Date类的方法中,还提供有两个long与Date间的转换操作方法:

(1) 构造方法:public Date(long date) 
(2)Date 变为 longpublic long getTime()

读者可以发现构造方法可以接收一个long类型的数据,而且getTime也可以返回一个long类型的数据,利用这两个方法就可以实现Date与long之间的转换。

【例11.23】Date与long间的转换

package jiaqi;

import java.util.Date;

public class demo332_1 
{

	public static void main(String[] args) 
	{
		//long
		long cur = System.currentTimeMillis();
		//Date
		Date date = new Date(cur);
		
		//date
		System.out.println(date);
		//long
		System.out.println(date.getTime());
		
		
	}
}

本程序首先利用System.currentTimeMillis()取得了当前的系统日期和时间数字,而后利用Date类构造方法以及getTime()方法,实现了 long与Date类对象之间的转换操作。

11.5.2 Calendar 类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【例11.24】取得系统的当前日期

package jiaqi;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class demo332_1 
{

	public static void main(String[] args) 
	{
		Calendar cr = new GregorianCalendar();
		//年      月         日      小时      分钟       秒      毫秒
		System.out.println(cr.get(Calendar.YEAR));
		System.out.println(cr.get(Calendar.MONTH)+1);
		System.out.println(cr.get(Calendar.DAY_OF_MONTH));
		System.out.println(cr.get(Calendar.HOUR_OF_DAY));
		System.out.println(cr.get(Calendar.MINUTE));
		System.out.println(cr.get(Calendar.SECOND));
		System.out.println(cr.get(Calendar.MILLISECOND));
		
	}
}

上面的程序通过GregorianCalendar子类实例化Calendar类,然后通过Calendar类中的各种常量及方法就可以取得系统的当前时间。
但 是 , 如 果 按 照 上 面 的 方 式 取 得 日 期 , 代 码 会 比 较 复 杂 , 所 以 在 J a v a 中 又 提 供 了 其 他 日 期
的类。

11.5.3 DateFormat 类

在这里插入图片描述

【例11.2】观察DateFormat中的默认操作

package jiaqi;

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class demo332_1 
{

	public static void main(String[] args) 
	{
			//实例化
			//日期
		  DateFormat df1 = DateFormat.getDateInstance();
		  	//日期  + 时间
		  DateFormat df2 = DateFormat.getDateTimeInstance();
		  
		  System.out.println(df1.format(new Date()));
		  System.out.println(df2.format(new Date()));
		
	}
}

在这里插入图片描述
从 程 序 运 行 的 结 果 发 现 , 第2个显 示 的 时 间 ,但还 不 是 比 较 合 理 的 中文显示格式。如果想取得更加合理的时间格式,则必须在构造DateFormat对象时传递若干参数。【版本问题】

【例11.26】指定显示的风格

package jiaqi;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class demo335_1 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		DateFormat df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,new Locale("zh", "CN"));
		System.out.println(df1.format(new Date()));
		DateFormat sf2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,new Locale("zh","CN"));
		System.out.println(sf2.format(new Date()));
		//DateFormat.YEAR_FIELD = 1        DateFormat.ERA_FIELD = 0
		System.out.println(DateFormat.YEAR_FIELD);
		System.out.println(DateFormat.ERA_FIELD);
	}
}


在这里插入图片描述
可 以 发 现 , 上 面 的 日 期 和 时 间 己 经 被 格 式 化 了 ,格式是其默认的时间显示格式,但是如果现在要想得到用户自己需要的日期显示格式则必须通过DateFormat的子类SimpleDateFormat类完成。

11.5.4 SimpleDateFormat 类

在这里插入图片描述
在这里插入图片描述
此外,还需要SimpleDateFormat类中的方法才可以完成转换。SimpleDateFormat类的常用方法如表11-10所示
在这里插入图片描述

【例11.27】格式化日期操作

package jiaqi;

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

public class demo336_1 {

	public static void main(String[] args) throws Exception
	{
		// TODO 自动生成的方法存根
		String input = "2022-02-085 10:22:25.321";
		String pat1 = "yyyy-MM-dd HH:mm:ss.SSS";
		String output = "【yyyy年】【MM月】【dd日】【HH时】【mm分】【ss秒】【SSS豪秒】";
		
		//实例化模板
		//提出数字
		SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);
		//格式化
		SimpleDateFormat sdf2 = new SimpleDateFormat(output);
		
			
		//将输入按照sdf1格式,转换为Date类型
		Date d = d = sdf1.parse(input);
		//将Date类转按照sdf2格式换为String类型
		System.out.println(sdf2.format(d));
		
	}

}

上面的程序中,首先使用第1个模板将字符串中表示的日期数字取出,之后再使用第2个模板将这些日期数字重新转换为新的格式表示。

【例】SimpleDateFormat类经常用于将String变为Date型数据

package jiaqi;

import java.text.SimpleDateFormat;

public class demo337_1 {

	public static void main(String[] args)throws Exception
	{
		String input = "[2020][10][22][10][10][10][321]";
		String pat = "[yyyy][MM][dd][HH][mm][ss][SSS]";
		SimpleDateFormat sdf = new SimpleDateFormat(pat);
		System.out.println(sdf.parse(input));
	}

}

11.5.5实例操作——取得完整日期

1.实现1——基于Calendar类

package jiaqi;

import java.util.Calendar;
import java.util.GregorianCalendar;

class Datetime
{
	private Calendar date = null;
	
	public Datetime() 
	{
		this.date = new GregorianCalendar();
	}
	
	//添加前导零
	public String add_0(int num,int len)
	{
		StringBuffer buf = new StringBuffer();
		buf.append(num);
		while(buf.length()<len)
		{
			buf.insert(0,"0");
		}
		return buf.toString();
	}
	
	//系统日期格式
	public String gettime_1() 
	{
		StringBuffer buf =new StringBuffer();
		buf.append(this.add_0(this.date.get(Calendar.YEAR),4));//年
		buf.append("-");
		buf.append(this.add_0(this.date.get(Calendar.MONTH)+1,2));//月
		buf.append("-");
		buf.append(this.add_0(this.date.get(Calendar.DAY_OF_MONTH),2));//日
		buf.append(" ");
		buf.append(this.add_0(this.date.get(Calendar.HOUR_OF_DAY),2));//时
		buf.append(":");
		buf.append(this.add_0(this.date.get(Calendar.MINUTE),2));//分
		buf.append(":");
		buf.append(this.add_0(this.date.get(Calendar.SECOND),2));//秒
		buf.append(".");
		buf.append(this.add_0(this.date.get(Calendar.MILLISECOND),3));//毫秒
		return buf.toString();
	}
	
	//中文格式
	public String gettime_2() 
	{
		StringBuffer buf = new StringBuffer();
		buf.append(this.add_0(this.date.get(Calendar.YEAR),4));//年
		buf.append("年");
		buf.append(this.add_0(this.date.get(Calendar.MONTH)+1,2));//月
		buf.append("月");
		buf.append(this.add_0(this.date.get(Calendar.DAY_OF_MONTH),2));//日
		buf.append("日 ");
		buf.append(this.add_0(this.date.get(Calendar.HOUR_OF_DAY),2));//时
		buf.append("时");
		buf.append(this.add_0(this.date.get(Calendar.MINUTE),2));//分
		buf.append("分");
		buf.append(this.add_0(this.date.get(Calendar.SECOND),2));//秒
		buf.append("秒");
		buf.append(this.add_0(this.date.get(Calendar.MILLISECOND),3));//毫秒
		buf.append("毫秒");
		return buf.toString();
	}
	
	//时间戳
	public String gettime_3()
	{
		StringBuffer buf =  new StringBuffer();
		buf.append(this.add_0(this.date.get(Calendar.YEAR),4));//年
		buf.append(this.add_0(this.date.get(Calendar.MONTH)+1,2));//月
		buf.append(this.add_0(this.date.get(Calendar.DAY_OF_MONTH),2));//日
		buf.append(this.add_0(this.date.get(Calendar.HOUR_OF_DAY),2));//时
		buf.append(this.add_0(this.date.get(Calendar.MINUTE),2));//分
		buf.append(this.add_0(this.date.get(Calendar.SECOND),2));//秒
		buf.append(this.add_0(this.date.get(Calendar.MILLISECOND),3));//毫秒
		return buf.toString();
	}
}

public class demo338_1 {

	public static void main(String[] args) 
	{
		Datetime date = new Datetime();
		System.out.println(date.gettime_1());
		System.out.println(date.gettime_2());
		System.out.println(date.gettime_3());
	}

}

2.实现 2——基于SimpleDateFormat 类【推荐做法】

package jiaqi;

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

class Time
{
	private SimpleDateFormat  sdf = null;
	
	public String getTime_1() 
	{
		this.sdf =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		return sdf.format(new Date());
	}

	public String getTime_2() 
	{
		this.sdf =  new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒SSS毫秒");
		return sdf.format(new Date());
	}

	public String getTime_3() 
	{
		this.sdf =  new SimpleDateFormat("yyyyMMddHHmmssSSS");
		return sdf.format(new Date());
	}

}
public class demo339_1 {

	public static void main(String[] args) 
	{
//		System.out.println(new Date());
		System.out.println(new Time().getTime_1());
		System.out.println(new Time().getTime_2());
		System.out.println(new Time().getTime_3());
		
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿斯卡码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值