• Java中的Date和Calendar


    一、什么是Date类?

    从字面上理解,Date类其实就是与时间挂钩的一个类,将时间日期这些值封装成了对象。

    二、Date类可以做什么用?

    封装时间日期成Date对象可以方便对其中的各个字段进行操作(年月日等),然而这个对象的很多方法都过时了,本身也不是特别方便,现在常用Calendar对象

    三、如何使用Date对象

    1、通过解析long型的的毫秒值数据来new一个Date对象,毫秒值从历史上某个时间点计算

    1 long time = System.currentTimeMillis();//获取当前时间,返回毫秒值
    2 
    3 Date date = new Date();//将当前日期和时间封装成Date对象。
    4 System.out.println(date);
    5 
    6 Date date2 = new Date(time);//将指定毫秒值封装成Date对象。
    7 System.out.println(date2);

    2、以上的封装的Date对象显示出来的时间日期不够友好风格,因此可以用日期格式器DateFormat

    1 Date date = new Date();//获取当前时间的Date对象
    2 
    3 //1、先要创建一个日期时间格式器,通过LONG,SHORT,FULL等字段定义日期时间格式器风格
    4 DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
    5 
    6 //2、通过日期时间格式器操作Date对象,返回一个字符串,即为默认风格的日期时间
    7 String str_date = dateFormat.format(date);
    8 
    9 System.out.println(str_date);//2016年4月13日 下午07时29分35秒

     3、但是这样仍然不够方便,有时候我们想要自定义风格,比如yy##MM##DD之类的。此时使用

    1 DateFormat dateFormat = new SimpleDateFormat("yyyy--MM--dd");//SimpleDateFormat中的字符串即日期格式
    2 
    3 String str_date = dateFormat.format(date);
    4 
    5 System.out.println(str_date);//2016--04--13

    由于DateFormat类是抽象类,因此没有办法new对象,格式器的风格都是固化的没办法变化。因此使用其子类SimpleDateFormat对象,它的构造方法中通过Pattern字符串来新建自定义格式器,其中特定字符对照如下 

    5、当我们在互联网上键入一个时间日期,这个时候服务器获得的是字符串,如果要对其中的年月日操作,就需要解析成Date对象,因此需要从字符串parse回Date。同样需要使用日期格式器作为转换桥梁

    1 String str_date = "2012年4月19日";
    2         
    3 //1、创建日期格式器,指定特定的日期格式
    4 DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd");
    5 //2、调用格式器的parse方法将字符串转换成Date对象        
    6 Date date = dateFormat.parse(str_date);
    7         
    8 System.out.println(date);//Thu Apr 19 00:00:00 CST 2012

    四、使用Calendar对象代替Date对象

    1、这也是一个抽象类,因此需要使用静态方法来获取Calendar实例

     1 public static void main(String[] args) {
     2         //1、通过getInstance方法将当前时间封装成Calendar对象
     3     Calendar c = Calendar.getInstance();
     4 
     5     showDate(c);//2016年4月13日星期三
     6 }
     7 
     8 public static String getWeek(int i) {
     9     
    10     String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
    11     
    12     return weeks[i];//通过i返回星期几的字符串,星期日为一周的第一天
    13 }
    14 public static void showDate(Calendar c) {
    15         //2、通过返回Calendar对象的字段值来获取年月日的值,然后任意指定输出格式
    16     int year = c.get(Calendar.YEAR);
    17     int month = c.get(Calendar.MONTH)+1;//0表示1月,因此这里要+1
    18     int day = c.get(Calendar.DAY_OF_MONTH);//获取一月中的天数
    19     int week = c.get(Calendar.DAY_OF_WEEK); //获取星期

     2、我们也可以从Date、毫秒值等来设置一个Calendar

    1 //1、创建一个Calendar对象
    2 Calendar c = Calendar.getInstance();
    3 //2、通过毫秒值设定时间
    4 c.setTimeInMillis(1335671230671l);//2012年4月29日星期日
    5 //通过日期创建Calendar
    6 c.setTime(new Date(223567456471l));//1977年1月31日星期一
    7 
    8 showDate(c);

    还可以用set方法设置Calendar对象的各个字段值,以自定义时间日期 

    3、如果要将字符串转化成Calendar对象,可以先将其通过SimpleFormat对象转化成Date对象,再用来新建一个Calendar对象

    Scanner s = new Scanner(System.in);
    
    System.out.println("请输入一个日期");
    
    String strDate = s.nextLine();
    //1、新建一个DateFormat对象,通过SimpleDateFormat对象创建格式器
    DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
    //2、调用该格式器的parse方法转换字符串
    Date d = df.parse(strDate);
    //3、获得的Date对象用来新建Calendar对象
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    //4、或得Days_OF_YEAR来获取一年中的第几天
    int doy = c.get(Calendar.DAY_OF_YEAR);
    
    System.out.println(strDate + "这是一年中的第" + doy + "天!");
    
    s.close();
  • 相关阅读:
    [转]按照HashTable动态设定类的属性和字段
    Enterprise Library 3.0 January 2007 CTP 数据访问程序块 _ 图解配置
    用Ad和windsor重构Portal
    ActiveRecordBase借助NHibernate的条件获取实体类对象
    Enterprise Library 3.0 January 2007 CTP 数据访问程序块 _ 系统自带链接字符串加密
    VS2005 SP1时因为安全策略而安装失败!
    [转]ASP.NET 2.0 的内部变化
    VB.NET 实现动态数组
    Making plain binary files using a C compiler (i386+)
    迭代器的使用方法简要介绍(摘自C++Primer)
  • 原文地址:https://www.cnblogs.com/njupt-Qsimple/p/5388675.html
Copyright © 2020-2023  润新知