package com.lesson11.example;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 了解java中的日期时间,学会时间格式的转化
* */
/*
* 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,
* 所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。
* 简单了解一下Date类的使用。
* */
/*
* 【总结】
* 1.Date类用于对时间的处理,也可获取当前系统时间:Date today = new Date();
* 2.Date类型和String类型相互转化:使用SimpleDateFormat类
* (1)实例化并设置时间格式:
* SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
* (2)Date->String:使用format方法
String str = sdf.format(Date date);
* (3)String->Date:使用parse方法
Date date = sdf.parse(String str);
* 3.Date类型和long类型相互转化(时间的计算通过毫秒换算)
* (1)Date->long:通过getTime()方法可以获取当前时间对应基准点的毫秒数
long l = date.getTime()
* (2)long->Date:将毫秒数作为参数传入Date中可获取换算后的时间
Date date = new Date(l);
* */
public class DateExample {
public static void main(String args[]){
/** Date类可以获取系统时间:星期 月份 日期 时间 年份* */Date today = new Date();System.out.println(today); //Sun Apr 26 22:02:59 CST 2015//Date date = new Date(2008-1900,8,8);//使用带参的构造方法指定日期,其中年份减去1900,因为是以1900年作为基准//System.out.println(date);//Mon Sep 08 00:00:00 CST 2008//现在该构造方法不建议使用,已由Calendar.set(year + 1900, month, date)代替/** 获取具体时间信息(以下方法现均不建议使用)* */int year = today.getYear()+ 1900; //获取年份,以1900年为基准,需要+1900int month = today.getMonth()+ 1; //获取月份,月份是从0开始计算,所以需要+1int day = today.getDate(); //获取日期int week = today.getDay(); //获取星期,用数字表示星期,规定周日为0//System.out.println("year="+year+",month="+month+",day="+day+",week="+week);DateExample de = new DateExample();de.formatTime(today);de.countTime(today);
}
/** 使用SimpleDateFormat类中的方法:format()和parse()* 功能:时间格式的转化 Date类型<-->String类型* ---------------------------------------------* 类:SimpleDateFormat* 构造方法:SimpleDateFormat()* SimpleDateFormat(String pattern)* 参数:String pattern 描述时间日期的格式* ---------------------------------------------* 方法:public StringBuffer format(Date date)* 功能:将给定的时间转化成规定格式的字符串* 参数:Date 需要转化的日期* 返回值:StringBuffer* ---------------------------------------------* 方法:public Date parse(String text)* public Date parse(String text,ParsePosition pos)* 功能:解析从 pos 给定的索引处开始的文本。如果解析成功,则将 pos 的索引更新为所用* 最后一个字符后面的索引(不必对直到字符串结尾的所有字符进行解析),并返回解析* 后得到的日期。更新后的 pos 可以用来指示下次调用此方法的起始点。如果发生错误,* 则不更改 pos 的索引,并将 pos 的错误索引设置为发生错误处的字符索引,并且* 返回 null。* 参数:String text 字符串,部分需要转化成时间* ParsePosition pos 具有以上所述的索引(开始解析的位置)和* 错误索引信息的 ParsePosition 对象* 返回值:Date 从字符串里解析出来的时间,如果发生错误,则返回null* 注意:需要抛出异常* ---------------------------------------------* 格式:必须符合SimpleDateFormat("……")中的格式* */
public void formatTime(Date today){
//首先必须创建SimpleDateFormat类对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/** 例:将系统时间转化成格式为YYYY-MM-DD hh:mm:ss的格式* */String dateStr = sdf.format(today);System.out.println(dateStr);/** 例:将字符串转化成时间日期* */try {
String str = "2008-08-08 12:11:10";Date date = sdf.parse(str);System.out.println(date); //Fri Aug 08 12:11:10 CST 2008String str2 = "ad2008-08-08 12:11:10";Date date2 = sdf.parse(str2, new ParsePosition(2));System.out.println("解析指定开始位置的字符串得到:"+date2);//解析指定开始位置的字符串得到:Fri Aug 08 12:11:10 CST 2008
} catch (ParseException e) {
e.printStackTrace();
}
}
/** 方法:public long getTime()* 功能:将Date类型时间转化成long类型,获取today时间对应基准点的毫秒数* 参数:无* 返回值:long 转化后的毫秒数* */
public void countTime(Date today){
/** 例:计算20天后的时间(计算时间都需要转化成毫秒计算)* */long todayTime = today.getTime(); //将今天的时间转化成long型的毫秒数System.out.println("today时间对应基准点的毫秒数:" + todayTime);//20天=20 * 24h * 60min * 60s * 1000long day20 = todayTime + 20 * 24 * 60 * 60 * 1000;System.out.println("20天后对应基准点的毫秒数:" + day20);//将long类型转化成Date类型时间,直接将long型作为参数传入Date after20 = new Date(day20);//Date的带参构造方法,能够根据传入的毫秒数初始化时间System.out.println("20天后的时间是" + after20);
}
}