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.util.Date

  • 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;

    • new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。

posted @   暴躁C语言  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示