最近遇到转换时间戳的需求,本篇记录时间、时区、时间戳等概念,并提供一个初级的换算工具类。
时间戳是一个很神奇的东西,地球上任何一个位置,此时此刻,时间戳都是一致的,然而时间就不一样了,东八区早上九点的时候,伦敦0区是当天凌晨一点,在跨越了日期线的时区,连日期都会不一致。而我们的项目提供给全球客户,因此,使用时间戳就很有必要了。
Unix时间戳,长度是10位数字。但是在安卓里获取到的当前时间戳会有13位,用时间戳来设置当前时间的时候也需要是13位。
(安卓有一个设置系统时间的方法,代码如下,传一个13位的时间戳进去)
1
|
SystemClock.setCurrentTimeMillis(timestamp);
|
代码
转换的工具类代码如下。是写给安卓测试的,但其实用的都是标准Java接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
package com.point.pointutils;
import java.text.DateForm 大专栏 时间、时区、时间戳at; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone;
/** * Created by Point on 2019/1/7. */
public class TimeUtils {
/** * 获取当前系统显示的时间,格式为 2019-01-07 14:00:00 * @return 当前系统显示的时间 */ public static String getLocalTime(){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); return format.format(new Date()); }
/** * 获取当前系统设置的时区 * @return */ public static String getTimeZone(){ return TimeZone.getDefault().getID(); }
/** * 将指定时区的指定时间转换为Unix时间戳 * @param time 待转换的时间 * @param timezone 待转换的时间的时区 * @return Unix时间戳 */ public static String getTimeStamp(String time, String timezone){ String timestamp = ""; DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); format.setTimeZone(TimeZone.getTimeZone(timezone)); try { Date date = format.parse(time); timestamp = format.format(date); } catch (ParseException e) { e.printStackTrace(); } return timestamp; }
/** * 将指定时间戳转换成指定时区的时间 * @param timestamp 待转换的时间戳,10位数字 * @param timezone 指定时区的ZoneID,可用TimeZone.getAvailableIDs()查询,建议使用本机时区 * @return 转换后的时间 */ public static String getTime(String timestamp, String timezone){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); format.setTimeZone(TimeZone.getTimeZone(timezone)); return format.format(new Date(Long.parseLong(timestamp)*1000)); }
}
|