java Date 日期格式化

今天来整理一下java中的日期类
1 时间原点的概念
八种基本数据类型包括字符串最终都可以以数字的方式表现出来(数据就是二进制,而二进制是可以转换成10进制的)
日期类型类似,2022年1,1,也可以用一个数字来代替
在日期中最特殊的数字其实也是0,0这个日期代表的就是java中时间的原点——》1970,1,1 8,0,0 1969全球发布了第一个unix系统,综合考虑就认为1970
凡是在这个0点的基础上,过一毫秒,意味着+1

2 创建日期对象

		//当前时间
		Date date=new Date();
		System.out.println(date);//Wed Aug 28 14:39:16 CST 2019
		//从原点过了100秒的时间
		//1970 01 01 08:00:00  100
		//1970 01 01 08:01:40  100
		//1000毫秒=1秒  100000=100s
		Date date2=new Date(100000);、//也就是从原点时间过了100000毫秒
		System.out.println(date2);//Thu Jan 01 08:01:40 CST 1970

3 getTime的使用
getTime()返回一个long整型
这个数代表从197011800开始每过一毫秒就增加1
直接打印对象会出现这样的日期格式:Wed Aug 28 14:39:16 CST 2019
可是阅读性差,需要转换成数字,方便阅读,至于格式化后面会讲

		Date now=new Date();
		System.out.println(now);
		//当前时间距离原点时间一共过了多少毫秒
		System.out.println(now.getTime());
		//1566974943085
		//如果要得到原点
		Date zero=new Date(0);
		System.out.println(zero.getTime());

4 运行一段程序需要多少时间


//计算一段程序运行了好久时间
public class Damo4 {
	public static void main(String[] args) {
		Damo4 damo4=new Damo4();
		damo4.forTest();
	}
	//观察一个程序执行多少时间
		public long startTime() {
			return new Date().getTime();
		}
		
		//10万次的for循环
		public  void forTest() {
			long startTime=startTime();
			int sum=0;
			for(int i=1;i<100000;i++) {
				sum+=i;
				//new DateTest("name:"+i);
			}
			System.out.println(sum);
			long endTime=endTime();
			long result=endTime-startTime;
			System.out.println(result);
		}
		public long endTime() {
			return new Date().getTime();
		}
}

5 System.currentTimeMills()
当前日期的毫秒数
理论上说getTime,currentTimeMills两个值应该是一样的,但是由于机器性能不相同,彼此相差几十毫秒,因为每一行代码实际上都需要时间来运行

		public void show() {
			int sum=0;
			for(int i=1;i<100000;i++) {
				sum+=i;
				//new DateTest("name:"+i);
			}
			System.out.println(sum);
			System.out.println(System.currentTimeMillis());
		}
		

运行结果为:
704982704
1566994316913

6 日期格式化
6.1 日期格式化成字符串

		//y year 年
		//m month 月
		//d day 日
		//h hour 小时
		//m minute 分钟
		//s seconds 秒
		//s milliseconds 毫秒
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS");
		Date now=new Date();
		String nowStr=sdf.format(now);
		System.out.println(nowStr);//2019-08-28 15:25:01 546

6.2 字符串格式化成日期

		SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

		String str="2019/8/28 11:12:01";
		try {
			Date date=sdf.parse(str);//DateForamt.parset(str)
			System.out.println(date);//Unparseable date: "2019/8/28 11:12:01"
			//Wed Aug 28 11:12:01 CST 2019
		} catch (ParseException e) {
			e.printStackTrace();
		}

注意:字符串转日期类的时候需要注意格式必须匹配到一起,否则可能会报异常

7 日历
通过日历类管理日期

日历最佳实践案例:翻日历
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;//util 工具
//需求:打印当前时间,下个月的今天,上个月的今天,去年的今天,上个月的第三天
public class TestDate01 {
	//设定打印的时间格式
	//simpledateformat
	private static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	public static void main(String[] args) {
		//搞一个日历耍耍
		Calendar c=Calendar.getInstance();
		
		//获取今天
		Date now=c.getTime();
		print(now);//2019-08-28 16:26:54
		//下个月的今天——每个月有固定的天数28 29 30 31
		//我要把今天加入日历
		c.setTime(now);
		//翻日历
		c.add(Calendar.MONTH,1);//下个月的今天 1 就是一个月后多一天
		//calendar.add(Calendar.MONTH, -3);//减号,就是前几个月。加号,就是往后几个月
		//calendar.add(Calendar.DATE, -3);//减号,就是当前日期的前几天,加号,就是当前时间的后几天
		//calendar.add(Calendar.YEAR, -3);//减号,就是当前年份的前几年,加号,就是当前年份的后几年
		Date nextMonthNow=c.getTime();
		print(nextMonthNow);
		//获取去年的今天
		c.setTime(now);
		c.add(Calendar.YEAR,-1);
		print(c.getTime());
		//上个月的第三天
		c.setTime(now);
		c.add(Calendar.MONTH,-1);
		//不改变大字段,改变小字段--不改年月改曰
		c.set(Calendar.DATE,3);
		print(c.getTime());
		
	}
	
	//打印格式
	private static void print(Date date) {
		System.out.println(sdf.format(date));
	}
	
}


  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值