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 HH:mm:ss”
注意:模式中的字母与不能改变,连接模式的符号可以改变
“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)
2. 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
		
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值