java中跟时间相关的类

1.SimpleDateFormat


public class SimpleDateFormat extends DateFormat

SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。

SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的方式启动。 但是,希望用 DateFormat 中的getTimeInstancegetDateInstancegetDateTimeInstance 创建一个日期-时间格式化程序。 每个类方法返回一个以缺省格式化方式初始化的日期/时间格式化程序。 可以根据需要用applyPattern方法修改格式化方式。

SimpleDateFormat类的继承关系:
java.lang.Object
   |
   +----java.text.Format
           |
           +----java.text.DateFormat
                   |
                   +----java.text.SimpleDateFormat

下面是个小例子:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/** 
    SimpleDateFormat函数语法: 
    
    G 年代标志符 
    y 年 
    M 月 
    d 日 
    h 时 在上午或下午 (1~12) 
    H 时 在一天中 (0~23) 
    m 分 
    s 秒 
    S 毫秒 
    E 星期 
    D 一年中的第几天 
    F 一月中第几个星期几 
    w 一年中第几个星期 
    W 一月中第几个星期 
    a 上午 / 下午 标记符 
    k 时 在一天中 (1~24) 
    K 时 在上午或下午 (0~11) 
    z 时区 
*/  

public class simpleDateFormat {
    
    public static void main(String[] args) {

        //利用构造函数设置格式化模板
        SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");  
        SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");  
        SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()  
        SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");  
        SimpleDateFormat myFmt4=new SimpleDateFormat(
                "一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
        //Date 表示距离1970-01-01 00:00:00的毫秒数,值与时区无关。
        Date now = new Date();
        //执行格式化功能
        System.out.println(myFmt.format(now));  
        System.out.println(myFmt1.format(now));  
        System.out.println(myFmt2.format(now));  
        System.out.println(myFmt3.format(now));  
        System.out.println(myFmt4.format(now));  
        
        //applyPattern方法设置格式化模板
        myFmt.applyPattern("yyyy-MM-dd");
        System.out.println(myFmt.format(now));
        
        //parse()方法用于将输入的特定字符串转换成Date类的对象
        Date date = null;
        String s = "2017-12-29 上午12:03";
        try {
            date = myFmt.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //toString时用本地时区输出,如Thu Jun 30 17:12:57 CST 2016,CST表示China Standard Time。
        System.out.println("date对象为" + date);//也可以直接利用toString方法输出
        System.out.println("date对象为" + date.toString());
    }
}

效果:
2017年12月29日 11时11分53秒
17/12/29 11:11
2017-12-29 11:11:53
2017年12月29日 11时11分53秒 星期五
一年中的第 363 天 一年中第52个星期 一月中第5个星期 在一天中11时 CST时区
2017-12-29
date对象为Fri Dec 29 00:00:00 CST 2017
date对象为Fri Dec 29 00:00:00 CST 2017

下面是一个格式化时间的工具类:

public class FormatDateTime {
   
    public static String toLongDateString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");       
        return myFmt.format(dt);
    }
   
    public static String toShortDateString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("yy年MM月dd日 HH时mm分");       
        return myFmt.format(dt);
    }   
   
    public static String toLongTimeString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("HH mm ss SSSS");       
        return myFmt.format(dt);
    }
    public static String toShortTimeString(Date dt){
        SimpleDateFormat myFmt=new SimpleDateFormat("yy/MM/dd HH:mm");       
        return myFmt.format(dt);
    }
   
    public static void main(String[] args) {

        Date now=new Date();

        System.out.println(FormatDateTime.toLongDateString(now));
        System.out.println(FormatDateTime.toShortDateString(now));
        System.out.println(FormatDateTime.toLongTimeString(now));
        System.out.println(FormatDateTime.toShortTimeString(now));
    }   
   
}


调用的结果如下:
2017年12月29日 10时46分09秒 星期五
17年12月29日 10时46分
10 46 09 0673

17/12/29 10:46


2.Date

Date类的继承关系:

java.lang.Object
   |
   +----java.util.Date

应用举例:

import java.util.Date;

public class dateTest {
	public static void main(String[] args){
		//第一种构造函数.无参构造创建的对象可以获取本机的当前日期和时间
		Date date1=new Date();
		//Date默认的时间表示顺序是:星期几、月、日、小时、分、秒、年。见下面的输出:
		System.out.println(date1);
		System.out.println(date1.toString());
		
		
		//第二种构造函数。public Date(long date);
		//首先,计算机将自身时间的“公元”设置为1970年1月1日00:00:00 GMT(格林威治时间)。
		//其次,根据参数date,正值表示公元后的时间,负值表示公元前的时间;
		//然后,创建一个 Date对象date2,并将其初始化为"公元"后的指定毫秒数1000。
		//最后,运行该java程序的计算机是在北京时区,date2表示的时间为:1970年1月1日08:00:01
		Date date2=new Date(1000);
		System.out.println(date2);
		
		
		//public long getTime();
		//返回相对于1970年1月1日00:00:00 GMT而言,此 Date对象表示的毫秒数。
		//运行该java程序的计算机是在北京时区,date2.getTime()表示相对于1970年1月1日08:00:00经过的毫秒数。
		System.out.println(date2.getTime());
		
		//System类的静态方法public long currentTimeMillis()获取系统当前时间。
		//运行该java程序的计算机是在北京时区,这个值是从1970年1月1日08:00:00到目前时刻走过的毫秒数。
		System.out.println(new Date().getTime());
		System.out.println(System.currentTimeMillis());
		
		//public void setTime(long time);
		//将Date对象设置为相对于1970年1月1日00:00:00 GMT后的time毫秒的时间点。  不再举例	
	}
}

执行结果:

Fri Dec 29 14:04:59 CST 2017
Fri Dec 29 14:04:59 CST 2017
Thu Jan 01 08:00:01 CST 1970
1000
1514527499432
1514527499432


3.Calendar

public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>

Calendar类的继承关系:

java.lang.Object
   |
   +----java.util.
Calendar

同样,Calendar类也在java.util包中。单词Calendar中文翻译为日历,实际上,在历史上有着许多种计时的方法。所以为了计时的统一,必需制定一个日历的标准。那现在最为普及和通用的日历标准就是"Gregorian Calendar"。也就是我们在讲述年份时常用"公元**年"。Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。使用Calendar类的static方法getInstance(),就可以初始化一个日历对象(获得一个"GreogrianCalendar"对象实例)。


Calendar对象可以调用以下三个set方法,将日历翻到任何一个时刻,当参数year取负值时表示公元前。

void set(int year, int month, int date) ;
void set(int year, int month, int date, int hourOfDay, int minute) ;
void set(int year, int month, int date, int hourOfDay, int minute, int second) ;
Calendar对象可以调用public int get(int field)方法获取年份、月份、小时、星期等信息。其中参数field的有效值由Calendar的静态常量指定。

应用举例:

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

class CalendarTest{
    public static void main(String[] args)
    {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        //比当前月份少1
        int month = cal.get(Calendar.MONTH);
        //date表示日期,day表示天数,所以date与day_of_month相同
        int date = cal.get(Calendar.DATE);
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        //表示本周的第几天,从周日开始计算
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
        //12小时制
        int hour = cal.get(Calendar.HOUR);
        //24小时制
        int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        int millisecond = cal.get(Calendar.MILLISECOND);
        int maxDate = cal.getActualMaximum(Calendar.DATE);
        System.out.println("现在的年份为:" + year);
        System.out.println("现在的月份为:" + month);
        System.out.println("现在的号为:" + date);
        System.out.println("现在的号为:" + dayOfMonth);
        System.out.println("现在是星期:" + (dayOfWeek-1));
        System.out.println("现在过了的天数为:" + dayOfYear);
        System.out.println("现在几点:" + hour);
        System.out.println("现在几点:" + hourOfDay);
        System.out.println("现在几分:" + minute);
        System.out.println("现在几秒:" + second);
        System.out.println("现在几毫秒:" + millisecond);
        System.out.println("本月最后一天是:" + maxDate);
    }
}

输出结果为:

现在的年份为:2017
现在的月份为:11
现在的号为:29
现在的号为:29
现在是星期:5
现在过了的天数为:363
现在几点:2
现在几点:14
现在几分:36
现在几秒:29
现在几毫秒:450
本月最后一天是:31


4.Date和Calendar之间转换

代码如下:

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

public class DateToCalendar {

	public static void main(String[] args) {
        //Calendar → Date 的转换

        Calendar calendar = Calendar.getInstance();
        // 从一个Calendar对象中获取Date对象
        Date now = calendar.getTime();
        System.out.println(now);
        
        
        //  Date  → Calendar 的转换
        // Calendar/GregorianCalendar都没有构造函数可以接受Date对象
        //所以我们必需先获得一个Calendar实例,然后设置Date对象
        Calendar cal = Calendar.getInstance();
        cal.setTime(now);
	}
}

5.代码的执行时间

	public String exportData(){
		Date date = new Date();

		//核心业务代码
		String msg = "一大批需要执行的业务代码";
		
		Date endDate = new Date();
		long diff = endDate.getTime() - date.getTime();
		
		//此处最好使用日志相关的方法,入logger.info();
		System.out.println("导出商品档案条,耗时"+diff+"毫秒");
		
		return msg;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值