美文网首页Android TipsAndroid知识Android开发
Android关于获取日期时间知识点整理

Android关于获取日期时间知识点整理

作者: 夜远曦白 | 来源:发表于2017-02-07 13:29 被阅读5360次

    项目开发过程中,获取时间日期以及一些转换呢,老忘记来着,总得花时间去查找资料,于是乎,现在终于要来整理整理下这方面的知识点了,用于巩固自己的记忆!

    时间戳(timestamp)

    指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,以为单位。【有时候一个项目从服务器那边返回的时间数据就是时间戳的格式,所以先弄清时间戳的定义。】

    System.currentTimeMillis()

    首先是 System.currentTimeMillis(),系统方法,用于获取当前系统时间,以毫秒为单位,返回的是long类型数据。若要获取当前的Unix时间戳,则需要 System.currentTimeMillis()/1000。

    打印这个方法得到的数据:

    Paste_Image.png

    Date

    类 java.util.Date 表示特定的瞬间,精确到毫秒。java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分。
    默认构造方法代表当前系统时间,打印new Date():


    Paste_Image.png

    Mon代表Monday(周一),Feb代表February(二月),06代表6号,GMT+代表格林尼治标准时间。

    new Date().getTime() 是得到当前时间的毫秒数等于 System.currentTimeMillis(),以毫秒为单位。

    注意Date带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。

    Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。

    Date中还提供了一些其他的构造方法以及其他方法,获取时间就直接这样子用了,由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。

    Calendar

    Calendar是个抽象类,它的构造方法是protected,所以需要用getInstance()方法得到它。

    Calendar c = Calendar.getInstance(); // 默认得到的是当前的日期
    Log.d(TAG, c + "");
    

    打印出:

    Paste_Image.png 由此,可知道GregorianCalendar 是Calendar的一个具体实现。


    getTime()方法返回的是一个Date类型,因此Calendar 与 Date 的相互转换非常简单:

    Calendar calendar = Calendar.getInstance();  
    // 从 Calendar 对象中获取 Date 对象 
    Date date = calendar.getTime();  
    // 将 Date 对象设置到 Calendar 对象中
    calendar.setTime(date);
    

    getTimeInMillis()返回的是long值,得到也是当前时间的毫秒数,等于System.currentTimeMillis() 等于 new Date().getTime() 。

    试验下几行代码,打印出来:

    Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);
    int second = c.get(Calendar.SECOND);
    int week_month = c.get(Calendar.WEEK_OF_MONTH);
    int week_year = c.get(Calendar.WEEK_OF_YEAR);
    int week_day = c.get(Calendar.DAY_OF_WEEK);
    int week_day_month = c.get(Calendar.DAY_OF_WEEK_IN_MONTH);
    Log.d(TAG, "year=" + year + "\nmonth=" + month + "\nday=" + day + "\nhour=" + hour + "\nminute=" + minute + "\nsecond=" + second + "\nweek_month=" + week_month + "\nweek_year=" + week_year + "\nweek_day=" + week_day + "\nweek_day_month=" + week_day_month);
    
    Paste_Image.png

    注意此处,获得的月份是从0开始计算的,所以真实月份需要+1即可;DAY_OF_WEEK得到的是星期几, 1代表星期日、2代表星期1、3代表星期二,以此类推;WEEK_OF_MONTH得到的是当月日历式的第几周(以日历上来看,第几行则为第几周);WEEK_OF_YEAR得到的是当年的第几周;DAY_OF_WEEK_IN_MONTH得到的是当月的第几周(七天为一周,如果是在当月的8号,则为第二周);

    Calendar注意事项:

    • Calendar的星期是从周日开始的,常量值为0。
    • Calendar的月份是从一月开始的,常量值为0。
    • Calendar的每个月的第一天值为1。

    Calendar中还有一些其他的方法,可以设置日期什么的,看看源码就知道怎么使用啦。

    Time

    实践下:


    Paste_Image.png
    Paste_Image.png

    看来Time都被废弃掉了,不推荐使用,不过还是了解一下它怎么得到当前日期时间吧。

    Paste_Image.png

    结果:


    Paste_Image.png

    使用Time获取当前时间需要setToNow()才行;同样的月份从0开始计算,实际月份需要+1;weekDay表示当前周的第几天(从0开始计算,周日到周六,周日为0);yearDay表示当前日期是当年的第几天(从0开始计算的);monthDay表示的是当前日期在当月的第几天。

    时间格式化

    最后记录下时间格式化,使用SimpleDateFormat 将时间格式化,以符合UI设计的显示标准。

     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     String dateString = simpleDateFormat.format(new Date());
    

    结果:


    Paste_Image.png

    也可以不要年份,这个随意啦,反正年月日时间的表达一定要这个英文就是了,大写MM代表月份,小写mm代表分钟。

    format方法中接收的参数是Date类型,反正了解了前面的基础知识,由时间戳转化为Date类型也简单,实际项目中要注意单位问题了,关键就是拿到的是时间的毫秒还是秒,相差1000,记得转换。

    现在年也过完了,新年的第一篇技术知识整理,要坚持下去啊,不要太相信自己的记忆力啦~新的一年,重整旗鼓,加油↖(ω)↗

    相关文章

      网友评论

        本文标题:Android关于获取日期时间知识点整理

        本文链接:https://www.haomeiwen.com/subject/imxobttx.html