Android系统时间制式的获取(24钟头制式/12小时制式)及UTC与本地时间的转换


Android系统时间制式的获取(24小时制式/12小时制式)及UTC与本地时间的转换

  I、获取系统时间制式(12小时制/24小时制)

  1、背景/使用场景

  在有些软件中,可能需要展示一些时间信息,而这些信息可能是Server以UTC格式或Unix timestamp 格式推送过来的,终端可能需要将这些转换为本地时间展示。

  而根据个人喜好,终端的制式可能是12小时制、也可能是24小时制的,为了软件的亲和度,就需要根据当前系统的时间的制式,动态转换制式,这样就需要获取系统当前设置的时间制式。

  2、获取方式

   ContentResolver cv = this.getContentResolver(); 

// 获取当前系统设置 

String strTimeFormat = android.provider.Settings.System.getString(cv, android.provider.Settings.System.TIME_12_24);

  if(strTimeFormat.equals("24")) { 

Log.i("activity","当前是24制式"); 

if(strTimeFormat.equals("12")) { 

Log.i("activity","当前是12制式"); 

}

  3、如何转换为12小时制式/24小时制式的表示方式

   String getTimestamp() { 

// 转换为24小时制式的字串 

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss sss"); 

Date date = new Date(); 

return df.format(date); 

}

   HH:返回的是24小时制的时间

   hh:返回的是12小时制的时间

  II、时区

  1、基本概念

  时区 :

  time zone 1884年国际经线会议规定,全球按经度分为24个时区,每区各占经度15°。

  以本初子午线为中央经线的时区为零时区,由零时区向东、西各分12区,东、西12区都是半时区,共同使用180°经线的地方时。

  CST :

  China Standard Time UTC+8:00 中国标准时间(北京时间),在东八区。

  UTC :

  Universal Time Coordinated,世界协调时间,又称世界标准时间、世界统一时间。UTC 提供了一种与时区无关(或非特定于时区)的时间。

  世界上的所有时区都可以表示为 UTC 加上或减去一个偏移量。

  因此,UTC是0时区的时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时。

  GMT :

  Greenwich Mean Time格林威治标准时间,指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

  Unix timestamp :

  Unix时间戳,或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,

  定义为从格林威治时间(UTC/GMT的午夜)1970年01月01日00时00分00秒起至现在的总秒数。

  可以这么说:

  UTC和GMT几乎是同一概念,两者的区别是GMT是一个天文上的概念,UTC是基于原子钟。

  GMT=UTC(精确滴说是:UTC = GMT +/- 0.9 s)

  GMT + 8 = UTC + 8 = CST

  UTC+时间差=本地时间 (时间差东为正,西为负,东八区记为 +0800)

  2、UTC与GMT本地时区的转换

  将Server传送的UTC时间,转换为指定时区的时间,示例代码如下。

  如果转换为本地Local时间,则直接传本地时区即可。

  本地时区的获取方法为TimeZone.getDefault()。

  /* 将Server传送的UTC时间转换为指定时区的时间 */ 

public String converTime(String srcTime, TimeZone timezone) { 

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 

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

String convertTime; 

Date result_date; 

long result_time = 0; 

// 如果传入参数异常,使用本地时间 

if (null == srcTime) { 

result_time = System.currentTimeMillis(); 

} else {

 // 将输入时间字串转换为UTC时间 

try { 

sdf.setTimeZone(TimeZone.getTimeZone("GMT00:00")); 

result_date = sdf.parse(srcTime); 

result_time = result_date.getTime();

 } catch (Exception e) { 

// 出现异常时,使用本地时间 

result_time = System.currentTimeMillis(); 

dspFmt.setTimeZone(TimeZone.getDefault()); 

convertTime = dspFmt.format(result_time);

return convertTime; 

// 设定时区 

dspFmt.setTimeZone(timezone); 

convertTime = dspFmt.format(result_time); 

Log.e("current zone:", "id=" + sdf.getTimeZone().getID() + " name=" + sdf.getTimeZone().getDisplayName()); 

return convertTime; 

}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值