这章主要讲解的是日期格式,日期可是也是java在使用中常用的类。在java中date类在1.7及其前主要有两个java.util.date和 java.sql.date.
这个类就没有必要看起源码了,因为这个类侧重与对其使用,以及不过日期格式以及日期与字符串之间的转换等操作。所以对于日期类我们就看起常用方法即可。
public class Test {public static void main(String[] args) {Date date=new Date();// 返回本地格式 一般为默认格式 System.out.println(date);//Wed Dec 02 20:22:06 CST 2020date=new Date(System.currentTimeMillis());//可以通过一个long类型的数据System.out.println(date);//Wed Dec 02 20:22:06 CST 2020System.out.Time());
// 下面几个方法。java已经不建议使用了,因为是年月,以及星期都是不太适合人去看System.out.Date());//2 得到日期中日System.out.Day());//3 得到星期几 其中周日为0System.out.Month());//11 月份是从1月份是0System.out.Year());//120 date中的年- 1900;System.out.println(new Date(2020-1900,11,2));// Wed Dec 02 00:00:00 CST 2020 new Date(year, month, date) 通过数字的年月进行创建date。但是其值需要对应处理// 因为一般我们使用的日期的时候一般是yyyy-mm-dd。所以需要修改date的格式这个时候就需要SimpleDateFormat类SimpleDateFormat simple=new SimpleDateFormat("yyyy-MM-dd");String strdate=simple.format(date);System.out.println(strdate);//2020-12-02try {System.out.println(simple.parse("2012-01-01"));//Sun Jan 01 00:00:00 CST 2012} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}////java.sql.date 其是java。util。date的子类 构造方法需要参数。java.sql.Date date1=new java.sql.Date(System.currentTimeMillis());System.out.println(date1);//2020-12-02 格式化日期转义形式 yyyy-mm-dd 的日期。System.out.Time());//1606911726545}}
通过上面的方法可以看出两个date类的相互转换可以通过时间戳进行转变。
通过上面操作会发现一件事情,就是对时间的操作,比如三天之后是什么日期。这样的操作通过date的话有点复杂,所以出现calendar这个抽象类。
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {
}
其类需要依靠子类GregorianCalendar实现。而子类的实例化可以通过new GregorianCalendar();。但是一般都是用Instance(); 进行实例化。
public class Test {public static void main(String[] args) {Calendar calInstance(); if(cal instanceof GregorianCalendar) {System.out.println("GregorianCalendar类的实例");}}}
//输出
GregorianCalendar类的实例
可以看出Instance()即是实例化GregorianCalendar类。
public class Test {public static void main(String[] args) {Date date=new Date();String day=new SimpleDateFormat("yyyy-MM-dd").format(date);System.out.println("程序运行的日期: "+day+" "+date);//程序运行的日期: 2020-12-03 Thu Dec 03 15:53:18 CST 2020Calendar calInstance(); System.out.(cal.YEAR));//2020System.out.(cal.MONTH));//11 可以看出其月份也是从o开始的,月份需要+1才是平常说的月份System.out.(cal.DAY_OF_MONTH));//3System.out.println(cal.WEDNESDAY);//4// 上面只是列举了几个,还可以得到年内第几周,月内第几周,以及时间等不再依次列举//System.out.TimeInMillis());//1606981998410 getTimeInMillis() 得到时间戳 System.out.Time());//Thu Dec 03 15:53:18 CST 2020 getTime() 得到一个date数据
// 既然有get方法 那就会有set方法cal.setTime(date); //将date转换成calender 数据cal.add(cal.YEAR, 20);// add() 选择不同的属性,可以加多少年,月日等 正数就是日期向后 ,负数就是先前System.out.Time());//Mon Dec 03 15:53:18 CST 2040cal.add(cal.DAY_OF_MONTH, 32);// 如果添加的日期大于calendar的月份的天数会自动进一位System.out.Time());//Fri Jan 04 15:53:18 CST 2041System.out.println(Instance()));//1 比较两个calendar的值大小,如果大于就返回1,相等为0,否则就是-1cal.set(2020, 5, 20);System.out.Time());//Sat Jun 20 15:53:18 CST 2020 这个地方可以看出月份的5代表6月,当然年和日期没有什么从o开始}}
calendar的方法对于一些日期的处理,可以简单很多了,比如求几天之后的日期等。calendar与date之间可以来回转换就不在多数,以及字符串之间的转换,都可以根据上面所演示的方法进行转换了。
虽然满足了平常的使用,但是其尤其是月不是从1开始,有些操作的时候很容易忽略或者错误。前面一直再说jdk1.7以及之前,所以就知道1.8就出现了新的日期格式类。当然这个也是借鉴了第三方的包—joda time。
jdk1.8中的新属性,没有再java.util下面而是再java.time下。
public class Test {public static void main(String[] args) {LocalDate ldw();System.out.println(ld);//2020-12-03
// 当然也可以得到想要的年月日System.out.Year());//2020System.out.MonthValue());//12System.out.DayOfMonth());//3System.out.Month());//DECEMBER 英语的月份System.out.println(ld.of(2013, 12, 1));// 2013-12-01 通过int创建日期其中的月不会找0开始 并且不会修改自己本身在值,而是返回一个新的localdateSystem.out.println(ld);//2020-12-03System.out.println(LocalDate.of(2013, 12, 1)); //2013-12-01// 虽然localdate的tostring打印一个字符串,但其格式时一定的DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy/MM/dd");System.out.println(ld.format(dtf));//2020/12/03String str="2018/12/03";System.out.println(LocalDate.parse(str, dtf));//2018-12-03 str="2018-12-03";System.out.println(LocalDate.parse(str));//2018-12-03 因为默认时yyyy-MM-dd System.out.println(ld.withYear(2011));//2011-12-03System.out.println(ld.withMonth(2));//2020-02-03System.out.println(ld.withDayOfYear(60));//2020-02-29System.out.println(ld.withDayOfMonth(20));// 2020-12-20 参数不能大于月份最大日期数System.out.println(ld.plusMonths(-1));//2020-11-03 ld.plusMonths() 计算多少月之后的日期,正数向前 负数向后System.out.println(ld.plusDays(50));//2021-01-22 ld.plusDays() 计算多少日之后的日期,正数向前 负数向后LocalDate ld1=ld.plusDays(50);System.out.println(ldpareTo(ld1));//-1 比较两个localdate的大写,如果小于等于大于依次返回-1,0.1// 计算两者日期之间的时间间隔 这个需要引用新的工具类 LocalDate ld2=LocalDate.of(2011, 1, 1);LocalDate ld3=LocalDate.of(2015, 10, 15);Period period=Period.between(ld2, ld3);System.out.Days()); //14 System.out.Months());//9System.out.Years());//4
// 上面可以看出年月日依次的值都大于前面的日期,那么我们修改其中一个值呢ld2=LocalDate.of(2011, 11, 1);ld3=LocalDate.of(2015, 10, 15);period=Period.between(ld2, ld3);System.out.Days()); //14 System.out.Months());//11System.out.Years());//3 可见其get方法会自动向前面借一位System.out.EpochDay()); // 将此日期转换为大纪元日。 也就是以某一个日期(具体哪一天忘了)作为基础然后到localdate的天数System.out.EpochDay()-EpochDay()); //这样可以计算两者之间相差了多少天// LocalDateTime lctw();System.out.println(lct); //2020-12-03T20:29:03.517 localdatetime 类中有时间的内容 其拥有的方法和localdate差不多,所以不再过多讲解LocalDateTime lct1=LocalDateTime.of(2011, 1, 1, 1, 1);LocalDateTime lct2=LocalDateTime.of(2012, 2, 3, 3, 1);
// // 计算的两者日期差Duration duration= Duration.between(lct1, lct2);System.out.Days());//398 两个之间的天数System.out.Hours());//9554 两个之间的小时数LocalTime ltw();System.out.println(lt); //20:44:27.222} }
现在我们看一些jdk的新增的一类instant。
public class Test {public static void main(String[] args) {System.out.w());//2020-12-04T11:09:45.924Instant instantw();System.out.println(instant);//2020-12-04T03:09:45.926Z//instant和localdatetime是统一时间运行 但是显示人时间有八个小时差别,因为北京时间是东八区所以会有八个小时的差异。//所以需要修改时区ZoneId defaultZoneId = ZoneId.systemDefault();System.out.println(instant.atZone(defaultZoneId));//2020-12-04T11:09:45.926+08:00[Asia/Shanghai]System.out.println(System.currentTimeMillis());//1607050307568 毫秒System.out.EpochMilli());//1607050307538 毫秒 toEpochMilli() 得到时间戳(这个不会收到时差的影响) System.out.println(Instant.ofEpochMilli(1607050307568L));//毫秒转换成instantSystem.out.println(instant.ofEpochSecond(1607050307L));// 秒数转换成instant}}
本文发布于:2024-01-31 06:09:50,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170665259426101.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |