1 前言

我们知道,对于时区来说,有着不同标准,比如:GMT和UTC,而且还存在夏令时等一些让人疑惑的概念。那么,对于Android开发来说,想获取到合适的时区,应该怎么做呢?

通常的,Android获取到的时区是使用Java的获取方式,默认获取GMT的标准。那么,根据返回时区的格式类型,一般有如下两种方式获取:

1.1 格式1:GMT+08:00

TimeZone.getDefault().getDisplayName(false, TimeZone.SHORT)

上面是常见的获取GMT时区的方式,但是会存在返回“PST”、“WIB”等别名的时区,这会导致返回格式不统一,解析起来会存在问题。

1.2 格式2:+0800

SimpleDateFormat("Z").format(Calendar.getInstance(TimeZone.getTimeZone("GMT"),Locale.getDefault()).time)

其实这种格式已经是比较通用,业务上可以直接使用这种方式统一时区格式。

2 自定义格式:GMT+08:00

针对我的业务,已经定好了GMT+08:00这种格式,但是使用格式1存在着返回格式不统一的问题。

全网并未找到合适的自定义格式方式,于是去看源码类TimeZone,发现了一个方法createGmtOffsetString和我的需求很像,诸君请看:

    /*** Returns a string representation of an offset from UTC.** <p>The format is "[GMT](+|-)HH[:]MM". The output is not localized.** @param includeGmt true to include "GMT", false to exclude* @param includeMinuteSeparator true to include the separator between hours     and minutes, false*     to exclude.* @param offsetMillis the offset from UTC** @hide used internally by SimpleDateFormat*/public static String createGmtOffsetString(boolean includeGmt,boolean includeMinuteSeparator, int offsetMillis)

        [GMT](+|-)HH[:]MM格式:includeGmt为true则显示“GMT”文本,includeMinuteSeparator为true则显示“:”。

此时可根据业务需求去自定义。但这个方法是hide,我们可依葫芦画瓢重写一波此方法即可。

如下所示:

object LanguageUtils {/*** 获取当前时区* +0800        SimpleDateFormat("Z").format(Calendar.getInstance(TimeZone.getTimeZone("GMT"),Locale.getDefault()).time)* GMT+08:00    TimeZone.getDefault().getDisplayName(false, TimeZone.SHORT)——会存在PST、WIB直接别名的时区,后端不好过滤,赞、暂不采用* GMT+08:00    参考TimeZone方法createGmtOffsetString自定义方式实现* @return GMT+08:00*/@JvmStaticfun getCurrentTimeZone(): String {return createGmtOffsetString(true, true, TimeZone.getDefault().rawOffset)}/*** Returns a string representation of an offset from UTC.** <p>The format is "[GMT](+|-)HH[:]MM". The output is not localized.** @param includeGmt true to include "GMT", false to exclude* @param includeMinuteSeparator true to include the separator between hours and minutes, false*     to exclude.* @param offsetMillis the offset from UTC** @hide used internally by SimpleDateFormat*/fun createGmtOffsetString(includeGmt: Boolean,includeMinuteSeparator: Boolean,offsetMillis: Int): String {var offsetMinutes = offsetMillis / 60000var sign = '+'if (offsetMinutes < 0) {sign = '-'offsetMinutes = -offsetMinutes}val builder: StringBuilder = StringBuilder(9)if (includeGmt) {builder.append("GMT")}builder.append(sign)appendNumber(builder, 2, offsetMinutes / 60)if (includeMinuteSeparator) {builder.append(':')}appendNumber(builder, 2, offsetMinutes % 60)return builder.toString()}private fun appendNumber(builder: StringBuilder, count: Int, value: Int) {val string = value.toString()for (i in 0 until count - string.length) {builder.append('0')}builder.append(string);}}

3 小结

重写源码类TimeZone的createGmtOffsetString方法即可。

赞一波,源码YYDS。。。

Android获取自定义格式时区相关推荐

  1. android获取图片格式,Android得到图片的真实格式——从本地文件或者网络文件流...

    ImageFormat Features 支持从InputStream或者File解析四种格式:jpg . png . webp . gif 从文件本身解析格式,而不是从扩展名获取 FormatHel ...

  2. 格式android id,android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...

  3. android 获取对话框对象,Android 基本Dialog和自定义Dialog

    Android 基本Dialog和自定义Dialog Dialog类是对话框的基类,但你应该避免直接实例化Dialog ,可以使用子类 1.AlertDialog 此对话框可以显示标题,最多三个按钮, ...

  4. Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册

    一.获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片: 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地 ...

  5. android 扫描所有图片格式,Android获取本机各种类型文件列表(音乐、视频、图片、文档等)...

    介绍 本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址. 提示 获取音乐.视频.图片.文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文 ...

  6. android获取服务器时间格式,Android 获取服务器与客户端时差的实例代码

    一般我们在做商品倒计时的时候会遇到要从后台获取商品的开始时间和结束时间,还要计算商品距离开始时间的倒计时和结束时间的倒计时,但是这样只是从后台获取到开始时间,还要再和手机系统的时间相减,才能获取到开始 ...

  7. android 获取当前时间精确到毫秒的两种方法

    1.概述 在android app开发中,在项目中有些功能需求要求要获取当前时间精确到毫秒,已便于完成功能开发的需要,而在android 的系统api中提供了SimpleDateFormat和Cale ...

  8. Android 获取设备各种信息以及其它

    做手机开发,想必都希望获取手机号码吧,android中有一个类android.telephony.TelephonyManager提供这个功能. TelephonyManager tm = (Tele ...

  9. android listpreference 自定义,Android中Fragmen首选项使用自定义的ListPreference的方法

    首选项这个名词对于熟悉Android的朋友们一定不会感到陌生,它经常用来设置软件的运行参数. Android提供了一种健壮并且灵活的框架来处理首选项.它提供了简单的API来隐藏首选项的读取和持久化,并 ...

最新文章

  1. 修改mysql表结构语句
  2. Android Glide加载图片成圆形
  3. java 获取请求客户端的真实IP地址
  4. ESP8266学习笔记6:ESP8266规范wifi连接操作
  5. 面试题:为什么Java中的字符串对象是不可变的
  6. 被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
  7. python入门神器 知乎_如何处理 Python 入门难以进步的现象?
  8. 餐饮点餐外卖小程序源码(外卖订餐系统源码)
  9. 华为od 面试题及流程 (前后端)
  10. 天下会 - Google系列之谷歌搜索引擎高级用法:使用搜索语法精确搜索
  11. 导出微信聊天记录生成词云
  12. 失眠怎么办?不妨试试这五款好物
  13. 模式识别:三层BP神经网络的设计与实现
  14. CSS第七天学习总结—— vertical-align 属性应用
  15. java画满天星_java实现的满天星效果实例
  16. 全国计算机一级报名科目怎么选,计算机一级考试4个科目是四选一吗
  17. 新手初学iPhone开发的路线图
  18. openCvSharp4手写体识别
  19. 数学建模论文写作方法之一(模型的建立与求解)
  20. matlab用app建立神经网络,Matlab Deep Network Designer APP搭建神经网络及相关函数讲解...

热门文章

  1. 人脸识别系统_人脸注册
  2. dataX和dataX-Web使用总结
  3. C++ 三目运算符 ?:
  4. 定积分不等式套路总结
  5. 《JavaEE初阶》HTTP协议和HTTPS
  6. 光学字符识别(OCR,Optical Character Recognition)
  7. H5 Handlebars的简单使用
  8. Linux编辑器-gcc/g++使用
  9. grequests并发之小试牛刀
  10. torch.onnx.export详细介绍