Java 日期时间类,日期时间格式化,Calendar类(日历)常用方法详解
Date类
使用Date类我们需要先了解一些常识:
Date类表示特定的时间,精确到毫秒1/1000秒
要对时间和日期进行计算,需要转换成毫秒值进行计算 计算后再把毫秒转换为日期(毫秒值表示1970年1月1日00:00:00.000 GMT之后的毫秒数。 )
1.把日期转换成毫秒
步骤:
1.获取当前日期:2020/4/13
2.时间原点:1970年1月1日00:00:00.000 英国格林威治
System.currentTimeMillis() 获取当前系统一共到1970年1月1日00:00:00.000 经历了多少毫秒
注意:中国输入东8 区,会把时间增加8个小时 1970年1月1日08:00:00.000
2.将毫秒转换成日期
1天 = 246060 = 86400秒 = 86400*1000 86400000毫秒
常用构造方法
Date类的空参数构造方法 Date() 获取当前系统的日期和时间
Date类的带参数构造方法 Date(long date) 传递毫秒值,把毫秒值转换成Date日期
long getTime() 把日期转换成毫秒相当于System.currentTimeMillis()方法
public class Demo02 {
public static void main(String[] args) {
demo01();
demo02();
demo03();
}
//Date类的空参数构造方法 Date() 获取当前系统的日期和时间
private static void demo01() {
Date date = new Date();
System.out.println(date);//Mon Apr 13 10:20:40 CST 2020
}
//Date类的带参数构造方法 Date(long date) 传递毫秒值,把毫秒值转换成Date日期
private static void demo02() {
Date date = new Date(1586743602927L);
System.out.println(date);//Mon Apr 13 10:06:42 CST 2020
}
//long getTime() 把日期转换成毫秒相当于System.currentTimeMillis()方法
//返回自1970年 1 月1日00:00:00 GMT以来此Date对象表示的毫秒值
private static void demo03() {
Date date = new Date(); //获取当前系统时间
long time = date.getTime();
System.out.println(time);//1586745118748
}
}
日期时间格式化
我们得到的时间一般都是英文状态的一个Date数据,那么我们如何才能将获取到的时间转换成我们希望的字符串格式呢,这就需要使用日期时间的格式化
DateFormat(日期格式化)类
(ps:注意:java.text.DateFormat 是日期/时间格式化子类的抽象类 抽象类我们不能直接调用,所以我们可以查看子类java.text.SimpleDateFormat 的方法)
通过这个类可以帮我们完成日期和文本之间的转换,也就是在Date对象与String对象之间进行来回转换
格式化:日期-》文本
format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
解析: 文本-》日期
parse(String source) 把符合模式的字符串,解析为Date日期
因为DateFormat是一个抽象类,所以我们不能直接调用,这里可以使用它的子类
java.text.SimpleDateFormat
关系:java.text.SimpleDateFormat extends DateFormat
SimpleDateFormat构造方法:
SimpleDateFormat(String pattern):
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
参数:String pattern :传递指定的模式
写对应的模式,会把模式替换成对应的日期和时间
“yyy-MM-dd HHss”
注意:模式中的字母与不能改变,连接模式的符号可以改变
“yyy年MM月dd日 HH时mm分ss秒”
常用的指定模式
y :年
M :月
d :日
H :时
m :分
s :秒
那么我们如何利用其构造模式,进行日期的格式化及解析呢
1.使用DateFormat类中的方法 format,把日期格式化为文本
1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");
2.调用SimpleDateFormat对象中的方法format 按照构造方法中指定的模式,把Date日期格式化为符合模式的文本
String str = simple.format(date);
完整的代码:
private static void demo01() {
Date date = new Date(); //获取一个系统时间
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");
//2.调用SimpleDateFormat对象中的方法format 按照构造方法中指定的模式,把Date日期格式化为符合模式的文本
String str = simple.format(date); //format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
System.out.println(str);//2020年04月13日 11时20分37秒
}
2.使用DateFormat类中的方法parse,把字符串,解析为Date日期
1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");
2.调用SimpleDateFormat对象中的方法parse 按照构造方法中指定的模式,格式化为Date日期
Date date = simple.parse(string);
注意:
parse方法声明了一个异常,如果字符串和构造方法模式不一致,那么程序就会抛出异常
调用一个抛出异常的方法,就必须处理这个异常,要么继续抛出异常throws 要么try catch 自己处理
完整的代码
private static void demo02(String string) throws ParseException {
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");
//2.调用SimpleDateFormat对象中的方法parse 按照构造方法中指定的模式,格式化为Date日期
Date date = simple.parse(string);
System.out.println(date);//Mon Apr 13 11:43:15 CST 2020
}
Calendar类(日历)
java.util.Calendar 是日历类,在Date之后替换了很多Date的方法
Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等)
Calendar类无法直接创建对象使用,里面有一个静态方法getInstance();该方法返回了Calendar类的子类对象
成员方法:
static Calendar getInstance()
使用默认时区和区域设置获取日历。
Calendar calendar = Calendar.getInstance();//多态
System.out.println(calendar);
public class Demo01 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();//多态
System.out.println(calendar);
}
}
输出值:java.util.GregorianCalendar[time=1586760906416,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Asia/Shanghai”,offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=3,WEEK_OF_YEAR=16,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=104,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=55,SECOND=6,MILLISECOND=416,ZONE_OFFSET=28800000,DST_OFFSET=0]
日历类的几个常用方法;
常用成员方法的参数:
int field :日历类的字段,可以使用Calendar类的静态成员变量获取
* public static final int YEAR =1 :年
* public static final int MONTH =2 :月
* public static final int DATE =5 :月中的某一天
* public static final int DAY_OF_MONTH =5; 月中的某一天
* public static final int HOUR =10 时
* public static final int MINUTE =12 分
* public static final int SECONE =13 秒
1.public int get(int field):返回给定日历字段的值
//public int get(int field):返回给定日历字段的值
//参数传入给定的日历字段(YEAR,MONTH)
//返回值:日历字段代表的具体的值
private static void demo01() {
//使用getInstance方法获取日历对象
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
System.out.println(year);//2020
int month =calendar.get(Calendar.MONTH);
System.out.println(month);//3 返回的西方月份 0-11 东方的是1-12 需要转换的话可以加1
// int day = calendar.get(Calendar.DATE);
int day = calendar.get(Calendar.DAY_OF_MONTH); //和上面一样
System.out.println(day);//13
}
2.public void set(int field , int value) 将给定的日历字段设置为给定值
参数:
1.int field:传入给定的日历字段(YEAR,MONTH)
2.int value:给指定的字段设置对应的值
private static void demo02() {
//使用getInstance方法获取日历对象
Calendar calendar= Calendar.getInstance();
//设置时间为9999年
calendar.set(Calendar.YEAR,9999);
//设置月为9月
calendar.set(Calendar.MONTH, 9);
//设置日为9日
calendar.set(Calendar.DATE, 9);
//同时设置年月日set的重载方法
calendar.set(9999, 9, 9);
int year = calendar.get(Calendar.YEAR);
System.out.println(year);//9999
int month =calendar.get(Calendar.MONTH);
System.out.println(month);//9 返回的西方月份 0-11 东方的是1-12 需要转换的话可以加1
int day = calendar.get(Calendar.DAY_OF_MONTH); //和上面一样
System.out.println(day);//9
}
3.public abstract void add(int field , int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
1.int field:传入给定的日历字段(YEAR,MONTH)
int amount:增加减少指定的值 正数增加 负数减少
private static void demo03() {
Calendar calendar= Calendar.getInstance();
//年增加10年
calendar.add(Calendar.YEAR, 10);
int year = calendar.get(Calendar.YEAR);
System.out.println(year);//2030
//月减少3个月
calendar.add(Calendar.MONTH, -3);
int month = calendar.get(Calendar.MONTH);
System.out.println(month); //0
}
4.public Date getTime(): 返回一个表示此Calendar时间量(从历元到现在的毫秒偏移量)的Date对象。
把日历对象转换成日期对象
private static void demo04() {
Calendar calendar=Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date);//Mon Apr 13 15:44:46 CST 2020
}
还没有评论,来说两句吧...