前言
学习一个类的方法,我会从JDK api中的构造函数开始(Date类有点过时了):
Date类
规则
Date类的一些规则说明:
类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:
年份 y 由整数 y - 1900 表示。
月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
日期(一月中的某天)按通常方式由整数 1 至 31 表示。
小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
分钟按通常方式由 0 至 59 的整数表示。
秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。
Date类的构造函数:
方法摘要
示例代码
package sise.Date;
import java.util.Date;
public class DateExample5 {
public static void main(String[] args) {
//CST中国标准时间
Date date1 = new Date();
System.out.println(date1);
//Thu Dec 31 16:42:00 CST 2020
Date date2=new Date(2011,12,28);
//此处想显示自己想要日期,参照之前的date类的日期规则
Date date21=new Date(2011-1900,8-1,31);
Date date22=new Date(2011-1900,2-1,31);//2月有点不一样
System.out.println(date2);
//Sun Jan 28 00:00:00 CST 3912
System.out.println(date21);
//Wed Aug 31 00:00:00 CST 2011
System.out.println(date22);
//本来是2月份的但是2月只有28天,周期是31天,所以进3
//Thu Mar 03 00:00:00 CST 2011
Date date3=new Date(2019-1900,10-1,28,15,49,59);
System.out.println(date3);
//Mon Oct 28 14:49:59 CST 2019
Date date4=new Date();
//获取距离历年的毫秒数
//以下的方法参考使用
long dateSecondTime=date4.getTime();
System.out.println(dateSecondTime);
//输出毫秒数1609908277179
//还原为原来的有格式人可以直接看出来的
date4.setTime(dateSecondTime);
//默认调用toString()
System.out.println(date4.toString());
// Date(String s)
// 查看源码了解,已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。
long oldTime = (new Date("2012/12/25 20:11:11")).getTime(); //得到毫秒数
Date newTime = new Date(oldTime); //就得到普通的时间了
System.out.println(oldTime);
System.out.println(newTime);
/**
* 将毫秒转化为人可以直接看清楚的
* 两种方式
*/
//上面的date4和newTime可以看出来
}
}
格式化和解析日期字符串类
常用DateFormat抽象类中的已知子类SimpleDateFormat 这里规范了很多的字符串的具体格式。以下讲到DateFormat类的一些用法。
local类表示时区,有一些字段(成员变量)可以选,比如CHINA
相关摘要
以下是DateFormat类:
以下为SimpleDateFormat类
以下是SimpleDateFormat类的应用,给生日文本框限制格式输入:
实例代码
有关DateFormat类的一些方法
public class DateFormTest {
public static void main(String[] args) {
Date ds[] = new Date[5];
ds[0] = new Date();
System.out.println(ds[0]);
ds[3] = new Date(2099 - 1900, 6 - 1, 6, 13, 23, 32);
System.out.println(ds[3]);
/**
* 这里检验getTimeInstance和getDateInstance方法参数改变有什么作用
*/
//后面local类对象表示了特定的地理、政治和文化地区,DateFormat类
DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CHINA);
DateFormat df1 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);
// format方法转化为String
String f1 = df.format(ds[3]);
System.out.println(f1);
//下午01时23分32秒 CST
String f2 = df1.format(ds[3]);
System.out.println(f2);
//2099年6月6日 星期六
try {
// parse方法将String类型转化为Date类
Date p1 = df.parse(f1);
// Date p2 = df.parse(f2);
// java.text.ParseException: Unparseable date: "2099年6月6日 星期六"
// at java.text.DateFormat.parse(Unknown Source)
System.out.println(p1);
// System.out.println(p2);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
有关SimpleDateFormat类的一些代码
public class SimpleDateTest {
public static void main(String[] args) {
SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat bDate = new SimpleDateFormat("yyyy张-MMMM-ddd");
//MM大于三个就显示中文 一月,也可以添加任意中文字符满足自己的要求
//2021张-一月-006
long now = System.currentTimeMillis();
System.out.println(aDate.format(now));
System.out.println(bDate.format(now));
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时区");
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));
}
}
输出:
2021-01-06 14:45:37
2021张-一月-006
2021年01月06日 14时45分37秒
21/01/06 14:45
2021-01-06 14:45:37
2021年01月06日 14时45分37秒 星期三
一年中的第 6 天 一年中第2个星期 一月中第2个星期 在一天中14时 CST时区
下面说明SimpleDateFormat类的parse方法和format方法有什么用:
public class SimpleDateTest {
public static void main(String[] args) {
String str_String="2010-02-22小朋友 12:32:32";
SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd小朋友 HH:mm:ss");
try {
//下面的str_String的格式要和SimpleDateFormat的格式一模一样才不会报错
Date p = aDate.parse(str_String);
System.out.println(p);
long time = p.getTime();
long parse = p.parse("Mon Feb 22 12:32:32 CST 2010");
//parse方法有误差,毫秒级就会被忽略可参考附录的三种方法,最后总结又说
System.out.println(aDate.format(parse));
System.out.println(aDate.format(time));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long now = System.currentTimeMillis();
//获取系统时间的距离1970年的毫秒数
System.out.println(aDate.format(now));
}
}
输出:
Mon Feb 22 12:32:32 CST 2010
2010-02-23小朋友 02:32:32
2010-02-22小朋友 12:32:32
2021-01-06小朋友 15:17:43
附录
闰年与闰月
平常年份每年365天,二月为28天,闰年为366天,二月为29天。因此,每400年中有97个闰年,闰年在2月末增加一天,闰年366天。
详情