2022.4.23 常用类 Date类、SimpleDateFormate类与Calender类 getInstance()方法
Date
1 package com.xing.Date; 2 3 import java.util.Date; 4 5 public class Demo01 { 6 public static void main(String[] args) { 7 //无参构造:打印当前时间 根据当前默认的毫秒值创建日期对象 8 Date date1 = new Date(); 9 System.out.println(date1);//Sun Apr 24 00:28:53 GMT+08:00 2022 10 11 //传入的参数为毫秒数 转化为时间 12 Date date2 = new Date(122358784545l);//里面是long类型 末尾加一个l 13 System.out.println(date2); 14 System.out.println(date2.getTime());//转化为时间戳 毫秒级别 15 System.out.println(date2.getTime()/1000);//转化为时间戳 秒级别 16 } }
SimpleDateFormate
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。允许进行格式化 (日期->文本)、解析(文本>日期)和规范化。
1 package com.xing.Date; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.SimpleTimeZone; 7 8 public class Demo02 { 9 public static void main(String[] args) throws ParseException { 10 Date time = new Date(); 11 12 //参数为时间模式 y:年 M:月 d:日 H:时 m:分 s:秒 13 SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 14 //SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd 'hf' HH:mm:ss"); 15 //SimpleDateFormat s = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 16 //SimpleDateFormat s = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); 17 //SimpleDateFormat s = new SimpleDateFormat("MM-dd"); 18 19 // 参数为毫秒数 format方法转换为String类型 20 System.out.println(s.format(time));//2022-04-24 00:59:45 21 System.out.println(s.format(121234646546l));//1973-11-04 12:17:26 22 23 //字符串转换为时间类型 24 String str = "2022-04-24 00:59:45"; 25 SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 26 //parse方法转换为util.Date 27 System.out.println(s1.parse(str));//转换为时间类型 需在方法抛出异常(时间格式可能不一致)ParseException 28 29 } 30 }
-
Java语言常规应用层面的日期类型,可以通过字符串创建对应的时间对象
-
无法直接通过JDBC插入到数据库
Java.sqL.Date
-
不可以通过字符串创建对应的时间对象,只能通过亳秒值创建对象(1970年至今的毫秒值)
-
可以直接通过JDBC插入到数据库
时间类型转换
现有问题:数据库存储的数据类型为iava,sql.Date。而我们Java应用层存储日期类型为java.util.Date。当我们用Java应用程序插入带有日期的数据到数据库中时,需要进行转换。
1 package com.xing.JDBC.utils; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 6 public class DateUtils { 7 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 8 9 //1.将yyyy-MM-dd模式的时间字符串转换为util.Date 10 public static java.util.Date strToUtil(String str){ 11 try { 12 java.util.Date date = sdf.parse(str); 13 return date; 14 } catch (ParseException e) { 15 e.printStackTrace(); 16 } 17 return null; 18 } 19 20 //2.util.Date转换为sql.Date 21 public static java.sql.Date utilToSql(java.util.Date date) { 22 //getTime()得到从1970-0-0开始走过的毫秒数 23 return new java.sql.Date(date.getTime()); 24 } 25 26 // 3.util.Date转换为字符串形式 27 public static String utilToStr(java.util.Date date) { 28 return sdf.format(date); 29 } 30 31 }
Calender
Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR 等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。
1 package com.xing.Calender; 2 3 import java.util.Calendar; 4 5 public class Demo01 { 6 public static void main(String[] args) { 7 //抽象类Calendar 不能通过new实例化 8 Calendar c = Calendar.getInstance(); 9 System.out.println(c.get(Calendar.YEAR));//年 10 System.out.println(c.get(Calendar.MONTH));//加1才为当前月份 11 System.out.println(c.get(Calendar.DAY_OF_YEAR));//在今年是第几天 12 System.out.println(c.get(Calendar.DAY_OF_MONTH));//在这个月是第几天 13 System.out.println(c.get(Calendar.DAY_OF_WEEK));//在这周是第几天 星期日为第一天 14 System.out.println(c.get(Calendar.HOUR));//时 12小时制 15 System.out.println(c.get(Calendar.HOUR_OF_DAY));//是24小时制 16 System.out.println(c.get(Calendar.MINUTE));//分 17 System.out.println(c.get(Calendar.SECOND));//秒 18 } 19 }
getInstance()
主函数当中使用此类的getInstance()函数,即可得到系统当前已经实例化的该类对象,若当前系统还没有实例化过这个类的对象,则调用此类的构造函数
-
对象实例化 对象的实例化方法,也是比较多的,最常用的方法是直接使用new。而这是最普通的,如果要考虑到其它的需要,如单实例模式,层次间调用等等。 直接使用new就不是最好的设计,这时候需要使用间接使用new,即getInstance方法。这是一个设计方式的代表,而不仅仅指代一个方法名。
-
GetInstance与new区别:
-
new的使用 如Object object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的
-
GetInstance的使用 在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。
-
-
两者区别对照
-
大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。
-
getInstance是少部分类才有的一个方法,各自的实现也不同。
-
getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。
-
对象使用之前通过getInstance得到而不需要自己定义,用完之后不需要delete;
-
new 一定要生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix