zoukankan      html  css  js  c++  java
  • java日期时间处理小结

    这两周时间的Java开发让我感觉到JAVA语言确实把一些简单的事情搞得很复杂,比如日期时间处理,或许是考虑不同时区国际化跨平台之类的因素,但JAVA语言处理确实让我很困惑,相信身边好多开发的同事也如此,只是简单知道有这些概念,遇到具体问题还需要上网查找,刚没事上网搜索了Java时间处理、api相关主题,基本没有多少满意结果,就暂时将觉得好的、让我有些收获的记录下来,以后遇到具体问题时再借助网络资源解决。

    Calendar是一个抽象类----专门获取一个时间点的DAY,MONTH,YEAR,一年中的第几天,星期几,一个月中的第几天等等
    Calendar rightNow = Calendar.getInstance()可获得一个Calendar (将当前时间点封装成一个Calendar对象)
     
    java.util.Date类   子类Calendar是一个抽象类----专门获取一个时间点的DAY,MONTH,YEAR,一年中的第几天,星期几,一个月中的第几天等等
     
    Calendar rightNow = Calendar.getInstance()可获得一个Calendar (将当前时间点封装成一个Calendar对象)
    用java.util.Date的三个子类java.sql.Date/java.sql.Time/java.sql.Timestamp处理
           ------------java.sql.Date   只存日期(年月日)
           ------------java.sql.Time   只存时间(时分秒  毫秒???)
           ------------java.sql.Timestamp(时间点):包括日期和时间两部分(年月日时分秒.纳秒)
    ——————————————————————————————————————————————————————
    1.UTC/UT
      世界标准时间
    2.GMT
      格林威治时间---1970 年 1 月 1 日 00:00:00(貌似和世界标准时间是一回事)
    3.how to get the current time
      1)System.currentTimeMillis-----返回当前时间点的毫秒表示,一般用于记录程序的运行时间
      2)Date date = new Date();
      3)Calendar calendar = Calendar.getInstance();
    4.how to format it
      日期的格式化(比如年月日的格式---年/月/日或年-月-日)要使用(java.text包中)抽象类DateFormat的子类
      SimpleDateFormat
      new SimpleDateFormat("日期格式")---->MM是月份,mm是分;HH是24小时制,而hh是12小时制
    5.how to convert a string to a date/time
      方法一:
      1)已知str="2012,12,21",new SimpleDateFormat("yyyy,MM,dd")----->创建要解析字符串为日期的格式
      2)sdf.parse(str)--->返回字符串对应的Date------->SimpleDateFormat除了格式化Date为字符串外,还能把字符串
                                                                                按格式解析为Date
      方法二:
      1)先将字符串转为"yyyy-mm-dd hh:mm:ss.0(纳秒)"的格式
      2)调用Timestamp t = new Timestamp().valueOf(str);(Timestamp的静态方法,util.Date.parse方法已过时..)
     
    6.how to process the date/time with database
    用java.util.Date的三个子类java.sql.Date/java.sql.Time/java.sql.Timestamp处理

    Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));    //获取东八区时间

      int year = c.get(Calendar.YEAR);    //获取年
      int month = c.get(Calendar.MONTH) + 1;   //获取月份,0表示1月份
      int day = c.get(Calendar.DAY_OF_MONTH);    //获取当前天数
      int first = c.getActualMinimum(c.DAY_OF_MONTH);    //获取本月最小天数
      int last = c.getActualMaximum(c.DAY_OF_MONTH);    //获取本月最大天数
      int time = c.get(Calendar.HOUR_OF_DAY);       //获取当前小时
      int min = c.get(Calendar.MINUTE);          //获取当前分钟
      int xx = c.get(Calendar.SECOND);          //获取当前秒

     

      SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      String curDate = s.format(c.getTime());  //当前日期


      Date d2 = new Date();

                       //年份
                       int year = d2.getYear() + 1900;
                       //月份
                       int month = d2.getMonth() + 1;
                       //日期
                       int date = d2.getDate();
                       //小时
                       int hour = d2.getHours();
                       //分钟
                       int minute = d2.getMinutes();
                       //秒
                       int second = d2.getSeconds();
                       //星期几
                       int day = d2.getDay();
    使用Date类中对应的get方法,可以获得Date类对象中相关的信息,需要注意的是使用getYear获得是Date对象中年份减去1900以后的值,所以需要显示对应的年份则需要在返回值的基础上加上1900,月份类似。在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。
       //将Date类的对象转换为相对时间
                       long t = d3.getTime();
                       System.out.println(t);
                       //将相对时间转换为Date类的对象
                       Date d4 = new Date(time);
                       System.out.println(d4);
             使用Date对象中的getTime方法,可以将Date类的对象转换为相对时间,使用Date类的构造方法,可以将相对时间转换为Date类的对象。经过转换以后,既方便了时间的计算,也使时间显示比较直观了。
    从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

    Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
    public final Date getTime()方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。
    类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:public final void setTime(Date date)
    转换的示例代码如下:
                      Date d = new Date();
                       Calendar c6 = Calendar.getInstance();
                       //Calendar类型的对象转换为Date对象
                       Date d1 = c6.getTime();
                       //Date类型的对象转换为Calendar对象
                       Calendar c7 = Calendar.getInstance();
                       c7.setTime(d);
     //将Calendar对象转换为相对时间

                                long t1 = c8.getTimeInMillis();

                                //将相对时间转换为Calendar对象

                                Calendar c9 = Calendar.getInstance();

                                c9.setTimeInMillis(t1);
    /**
     * 计算两个日期之间相差的天数
     */
    public class DateExample1 {
             public static void main(String[] args) {
                       //设置两个日期
                       //日期:2009年3月11号
                       Calendar c1 = Calendar.getInstance();
                       c1.set(2009, 3 - 1, 11);
                       //日期:2010年4月1号
                       Calendar c2 = Calendar.getInstance();
                       c2.set(2010, 4 - 1, 1);
                       //转换为相对时间
                       long t1 = c1.getTimeInMillis();
                       long t2 = c2.getTimeInMillis();
                       //计算天数
                       long days = (t2 - t1)/(24 * 60 * 60 * 1000);
                       System.out.println(days);
             }
    }
       import java.util.*;
    /**
     * 输出当前月的日历
     */
    public class DateExample2{
             public static void main(String[] args){
                       //获得当前时间
                       Calendar c = Calendar.getInstance();
                       //设置代表的日期为1号
                       c.set(Calendar.DATE,1);
                       //获得1号是星期几
                       int start = c.get(Calendar.DAY_OF_WEEK);
                       //获得当前月的最大日期数
                       int maxDay = c.getActualMaximum(Calendar.DATE);   
                      
                       //输出标题
                       System.out.println("星期日 星期一 星期二 星期三 星期四 星期五   星期六");
                       //输出开始的空格
                       for(int i = 1;i < start;i++){
                                System.out.print("      "); 
                       }
                       //输出该月中的所有日期
                       for(int i = 1;i <= maxDay;i++){
                                //输出日期数字
                                System.out.print(" " + i);
                                //输出分隔空格
                                System.out.print("     ");
                                if(i < 10){
                                         System.out.print(' ');
                                }
                                //判断是否换行
                                if((start + i - 1) % 7 == 0){
                                         System.out.println();       
                                }
                       }
                       //换行
                       System.out.println();       
             }       
    }
  • 相关阅读:
    2017.11.20 定时器与数码管
    2017.11.19 C语言基础及流水灯实现
    libcmtd.lib(exe_wwinmain.obj) : error LNK2001: 无法解析的外部符号 _wWinMain@16
    VCatlmfcincludeafx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    VS2015解决 error C4996: 'strdup': The POSIX name for this item is deprecated.
    vs2015单元测试
    pkg-config的一些用法
    CMake快速入门
    CMake入门教程
    Ubuntu16.04下安装NVIDIA显卡驱动
  • 原文地址:https://www.cnblogs.com/doit8791/p/3444743.html
Copyright © 2011-2022 走看看