Java基础学习08-日期

在JAVA中有六个与时间有关的类:

1.  java.util.Date  
2.  java.sql.Date    
3.  java.sql.Time    
4.  java.sql.Timestamp  
5.  java.text.SimpleDateFormat  
6.  java.util.Calendar

常用时间设置类

java.util.Date
java.util.Date 是java.sqlDate,Time,Timestamp的父类,Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒。是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.Calendar类所取代

java.text.DateFormat(抽象类)
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年1 月 1 日 00:00:00 这一刻开始的毫秒数。 不过DateFormat的格式化Date的功能有限,没有SimpleDateFormat强大;但DateFormat是SimpleDateFormat的父类。

java.text.SimpleDateFormat (DateFormat的直接子类)
SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。
SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。
日期格式字符串如下:

20171220135015076.png

(4)、java.util.Calendar(抽象类)
java.util.Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

常用代码

日期转字符串、字符串转日期

/*
*日期转字符串、字符串转日期
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
//设置为东八区
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
try {  
    //1、日期转字符串  
    Calendar calendar = Calendar.getInstance();  
    Date date = calendar.getTime();  
    String dateStringParse = dateFormat.format(date);  
    System.out.println(dateStringParse);  
    //2、字符串转日期  
    String dateString = "2021-01-07 16:53:08";  
    Date dateParse = dateFormat.parse(dateString);  
    System.out.println(dateParse);  
} catch (ParseException e) {  
    e.printStackTrace();  
}  

获取时间戳

Date date = new Date();  
System.out.println(date.getTime());  

获取带周的时间格式

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date d1 = df.parse("2017-12-20 12:19:19");  
//指定日期  
Calendar cal = df.getCalendar();  
//当前时间  
Calendar cas = Calendar.getInstance();  
int year = cal.get(Calendar.YEAR);//获取年份  
int month=cal.get(Calendar.MONTH);//获取月份  
int day=cal.get(Calendar.DATE);//获取日  
int hour=cal.get(Calendar.HOUR);//小时  
int minute=cal.get(Calendar.MINUTE);//分  
int second=cal.get(Calendar.SECOND);//秒  
int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK);//一周的第几天  
System.out.println("现在的时间是:公元"+year+"年"+month+"月"+day+"日      "+hour+"时"+minute+"分"+second+"秒     星期"+WeekOfYear);  

获取当前时间显示,上午,下午

Date date = new Date();  
DateFormat df1 = DateFormat.getDateInstance();//日期格式,精确到日  
System.out.println(df1.format(date));  
DateFormat df2 = DateFormat.getDateTimeInstance();//可以精确到时分秒  
System.out.println(df2.format(date));  
DateFormat df3 = DateFormat.getTimeInstance();//只显示出时分秒  
System.out.println("只显示出时分秒:"+df3.format(date));  
DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期,周,上下午,时间(精确到秒)  
System.out.println("显示日期,周,上下午,时间(精确到秒):"+df4.format(date));  
DateFormat df5 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期,上下午,时间(精确到秒)  
System.out.println("显示日期,上下午,时间(精确到秒):"+df5.format(date));  
DateFormat df6 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期,上下午,时间(精确到分)  
System.out.println("显示日期,上下午,时间(精确到分):"+df6.format(date));  
DateFormat df7 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //显示日期,时间(精确到分)  
System.out.println("显示日期,时间(精确到分):"+df7.format(date));  

两个日期相差多少小时,分钟,毫秒

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date d1 = df.parse("2017-12-20 12:19:19");  
Date d2 = df.parse("2017-12-20 11:40:34");  
long nd = 1000 * 24 * 60 * 60;  
long nh = 1000 * 60 * 60;  
long nm = 1000 * 60;  
long ns = 1000;  
// 获得两个时间的毫秒时间差异  
long diff = d1.getTime() - d2.getTime();  
// 计算差多少天  
long day = diff / nd;  
// 计算差多少小时  
long hour = diff % nd / nh;  
// 计算差多少分钟  
long min = diff % nd % nh / nm;  
// 计算差多少秒//输出结果  
long sec = diff % nd % nh % nm / ns;  
System.out.println(day + "天" + hour + "小时" + min + "分钟"+ sec + "秒");  
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容