美文网首页
Android 应用中处理时区转化问题

Android 应用中处理时区转化问题

作者: 石先 | 来源:发表于2017-11-03 15:44 被阅读213次

在应用国际化进程中,展示页面需要考虑一定时区转化的问题。这里我们先假设一个场景:
比如应用拥有一个简单的交易流程,用户完成订单交易后,可以看到订单交易记录。这时交易系统中会记录一个与该订单相关的交易时间戳,用户在页面上看到时就是其当前真实交易时间。

一般来说为了交易信息具有统一规范,也方便交易报表的数据信息收集,都会使用统一的时区作为基准.比如交易系统约定好所有的交易相关的时间都采用北京时间作为基准,在订单创建是会自动获取当前北京时间作为时间戳记录,跟当前客户端的设备时间无关。

但是为了让用户看到的交易时间是与其设备时间相关的,而不是交易系统中的北京时间,这时就需要一个交易系统时间转换成当前设备所设置的时区时间,这里就题目中提到的时区转化问题。

下面给出客户端实现时区转换的简单例子:

// 获取交易系统中返回的订单交易时间,格式:yyyyMMddHHmmss
String transactionTime = transactionBean.getTransactionTime();

// 进行 DateFormat,将交易系统时间戳格式 yyyyMMddHHmmss 变成 Date 对象
SimpleDateFormat transactionSystemDateFormatter = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH);

// 交易系统的时间是北京时间,所以 Format 时要指定为北京时区
transactionSystemDateFormatter.setTimeZone(TimeZone.getTimeZone(Constants.BEIJING_TIMEZONE));

// parse 输入 transactionTime 是交易系统中的北京时间戳
// parse 输出的结果是跟设备所设置时区相关 Date 对象
Date deviceDate = transactionSystemDateFormatter.parse(transactionTime);

// 把 Date 转化成客户端展示的时间格式 yyyy-MM-dd HH:mm:ss
SimpleDateFormat deviceDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);

// 得到展示给用户的时间
String showDate = deviceDateFormat.format(deviceDate);

相关文章

网友评论

      本文标题:Android 应用中处理时区转化问题

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