最近遇到转换时间戳的需求,本篇记录时间、时区、时间戳等概念,并提供一个初级的换算工具类。
时间戳是一个很神奇的东西,地球上任何一个位置,此时此刻,时间戳都是一致的,然而时间就不一样了,东八区早上九点的时候,伦敦0区是当天凌晨一点,在跨越了日期线的时区,连日期都会不一致。而我们的项目提供给全球客户,因此,使用时间戳就很有必要了。
Unix时间戳,长度是10位数字。但是在安卓里获取到的当前时间戳会有13位,用时间戳来设置当前时间的时候也需要是13位。
(安卓有一个设置系统时间的方法,代码如下,传一个13位的时间戳进去)
1 |
SystemClock.setCurrentTimeMillis(timestamp); |
代码
转换的工具类代码如下。是写给安卓测试的,但其实用的都是标准Java接口。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
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)); } } |
原文地址:https://www.cnblogs.com/liuzhongrong/p/12000090.html
时间: 2024-11-11 19:19:58