项目开发过程中,获取时间日期以及一些转换呢,老忘记来着,总得花时间去查找资料,于是乎,现在终于要来整理整理下这方面的知识点了,用于巩固自己的记忆!
时间戳(timestamp)
指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,以秒为单位。【有时候一个项目从服务器那边返回的时间数据就是时间戳的格式,所以先弄清时间戳的定义。】
System.currentTimeMillis()
首先是 System.currentTimeMillis(),系统方法,用于获取当前系统时间,以毫秒为单位,返回的是long类型数据。若要获取当前的Unix时间戳,则需要 System.currentTimeMillis()/1000。
打印这个方法得到的数据:
Paste_Image.pngDate
类 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 + "");
打印出:
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,记得转换。
现在年也过完了,新年的第一篇技术知识整理,要坚持下去啊,不要太相信自己的记忆力啦~新的一年,重整旗鼓,加油↖(ω)↗
网友评论