在程序的开发中经常会遇到日期类型的操作。Java对于日期的操作也提供了良好的支持,主要使用java.util包中Date
、Calendar,
以及java.text包中的SimpleDateFormat
实现。下面介 绍其具体用法。
ate类是一个相对较为简单的操作类,在使用中直接使用java.util.Date类的构造方法并进行输出就可以得到一个完整的日期,构造方法定义如下:
public Date()
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 变为 long: public long getTime()。
读者可以发现构造方法可以接收一个long
类型的数据,而且getTime
也可以返回一个long
类型的数据,利用这两个方法就可以实现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类对象之间的转换操作。
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 中 又 提 供 了 其 他 日 期
的类。
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对象时传递若干参数。
【版本问题】
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
类完成。
此外,还需要SimpleDateFormat类中的方法才可以完成转换。SimpleDateFormat类的常用方法如表11-10所示
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个模板将这些日期数字重新转换为新的格式表示。
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));
}
}
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());
}
}
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());
}
}