android获取时区时间格式,Android关于获取日期时间知识点整理

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

时间戳(timestamp)

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

System.currentTimeMillis()

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

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

57cd6ead77c0

Paste_Image.png

Date

类 java.util.Date 表示特定的瞬间,精确到毫秒。java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分。

默认构造方法代表当前系统时间,打印new Date():

57cd6ead77c0

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 + "");

打印出:

57cd6ead77c0

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

57cd6ead77c0

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

实践下:

57cd6ead77c0

Paste_Image.png

57cd6ead77c0

Paste_Image.png

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

57cd6ead77c0

Paste_Image.png

结果:

57cd6ead77c0

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());

结果:

57cd6ead77c0

Paste_Image.png

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值