第十四届蓝桥杯集训——Date与Calendar函数
Date参数
Data其实我们用的已经很少了,现在使用Data一般都是使用SimpleDateFormat返回一个当前的符合要求的时间字符串。也就是当前时间,一般是【yyyy-MM-dd HH:mm:ss】
我们先来看一下date的使用:
package com.item.action; import java.util.Date; public class Demo1 { public static void main(String[] args) { Date d1 = new Date(); System.out.println(d1); //作废的 Date d2 = new Date(2023,0,10,8,8,8); System.out.println(d2); System.out.println(d2.getYear());//年 System.out.println(d2.getMonth()+1);//月从0开始 System.out.println(d2.getDay());//日期 System.out.println(d2.getHours());//小时 System.out.println(d2.getMinutes());//分钟 System.out.println(d2.getSeconds());//秒 } }
我们可以获取年月日时分秒都是没有问题的。那么,我们有了时间是否可以计算一下程序的运行的时间呢,这肯定是可以的,我们来测试一下。
字符串累加i自然数到100000,不输出,需要消耗时间:
package com.item.action; public class Demo1 { public static void main(String[] args) { long start = System.currentTimeMillis(); String str=""; for (int i = 0; i < 100000; i++) { str+=i; } long end = System.currentTimeMillis(); System.out.println("程序运行时间:"+(end-start)); } }
时间消耗:
使用【StringBuffer】消耗时间:
package com.item.action; public class Demo1 { public static void main(String[] args) { long start = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < 100000; i++) { sb.append(i); } long end = System.currentTimeMillis(); System.out.println("程序运行时间:"+(end-start)); } }
消耗时间:
使用【StringBuilder】:
无论是使用【StringBuffer】还是使用【StringBuilder】消耗的时间都差不多。
StringBuffer与StringBuilder的区别
1、运行速度方面:StringBuilder > StringBuffer >String
2、线程安全方面:StringBuffer是线程安全的,StringBuilder是线程不安全的
3、StringBuffer类与StringBuilder类的原理和操作基本相同,区别就是StringBuffer是线程安全的,支持并发性操作,适合应用在多线程之中。
StringBuilder不支持并发性操作,线程是不安全的,但其在单线程中的性能要比StringBuffer高。
SimpleDateFormat函数
时间格式化函数,我们可以将时间格式化成我们想要的样子。
package com.item.action; import java.text.SimpleDateFormat; import java.util.Date; public class Demo1 { public static void main(String[] args) { //声明Date类型当前时间 Date date=new Date(); //格式化data类型为String类型 SimpleDateFormat simp=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = simp.format(date); System.out.println(format); } }
格式化对照表:
yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH(推荐使用):24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区
SimpleDateFormat的Date时间格式化
package com.item.action; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Demo1 { public static void main(String[] args) { SimpleDateFormat simp=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = simp.parse("2022-02-02 22:22:22"); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); } } }
字符串的时间已经返回成Date类型了。
Calendar
所述Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。
与其他区域设置敏感的类一样, Calendar提供了一种类方法getInstance ,用于获取此类型的一般有用的对象。 Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间进行初始化:
Calendar rightNow = Calendar.getInstance();
Calendar对象可以产生实现特定语言和日历风格的日期时间格式化所需的所有日历字段值(例如日语 - 公历,日语 - 繁体)。 Calendar定义某些日历字段返回的值的范围及其含义。 例如,日历系统第一个月的值为MONTH == JANUARY为所有日历。 其他值由具体的子类定义,如ERA 。
使用列表
package com.item.action; import java.text.SimpleDateFormat; import java.util.Calendar; public class Demo1 { public static void main(String[] args) { Calendar rili = Calendar.getInstance(); rili.set(2023, 0, 9, 9, 9, 9);//设置时间 rili.add(rili.DAY_OF_MONTH, 365);//增加365天·年月日都能换 System.out.println("未格式化的时间格式:"+rili.getTime()); SimpleDateFormat simp=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("日期格式化:"+simp.format(rili.getTime())); System.out.println("目标日期年份:"+rili.get(Calendar.YEAR));//Calendar有枚举直接用 System.out.println("作为的获取年份:"+rili.getTime().getYear());//已经作废的 System.out.println("目标日期月:" + rili.get(Calendar.MONTH));// 初始月份是从0开始,所以输出值比是几月份小1 System.out.println("目标日期:" + rili.get(Calendar.DATE)); System.out.println("目标年份第几个星期:" + rili.get(Calendar.WEEK_OF_YEAR)); System.out.println("目标月份第几个星期:" + rili.get(Calendar.WEEK_OF_MONTH)); System.out.println("目标年份第几天:" + rili.get(Calendar.DAY_OF_YEAR)); System.out.println("目标月份第几天:" + rili.get(Calendar.DAY_OF_MONTH)); System.out.println("目标星期第几天:" + rili.get(Calendar.DAY_OF_WEEK)); System.out.println("目标月份第几个星期:" + rili.get(Calendar.DAY_OF_WEEK_IN_MONTH)); System.out.println("目标当天第几个小时:" + rili.get(Calendar.HOUR_OF_DAY)); System.out.println("目标小时第几分钟:" + rili.get(Calendar.MINUTE)); System.out.println("目标分钟第几秒:" + rili.get(Calendar.SECOND)); System.out.println("目标秒数第几毫秒:" + rili.get(Calendar.MILLISECOND)); } }
输出效果:
有了这个我们就能随意的处理时间格式了。