时间、时区、时间戳

  1. 说明
  2. 代码

最近遇到转换时间戳的需求,本篇记录时间、时区、时间戳等概念,并提供一个初级的换算工具类。

说明

时间戳是一个很神奇的东西,地球上任何一个位置,此时此刻,时间戳都是一致的,然而时间就不一样了,东八区早上九点的时候,伦敦0区是当天凌晨一点,在跨越了日期线的时区,连日期都会不一致。而我们的项目提供给全球客户,因此,使用时间戳就很有必要了。

Unix时间戳,长度是10位数字。但是在安卓里获取到的当前时间戳会有13位,用时间戳来设置当前时间的时候也需要是13位。

(安卓有一个设置系统时间的方法,代码如下,传一个13位的时间戳进去)

SystemClock.setCurrentTimeMillis(timestamp);

代码

转换的工具类代码如下。是写给安卓测试的,但其实用的都是标准Java接口。

package com.point.pointutils;

import java.text.DateFormat;
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));
    }


}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 point_1024@163.com

文章标题:时间、时区、时间戳

本文作者:Point Tang

发布时间:2019-01-07, 18:51:40

最后更新:2019-12-13, 10:48:39

原始链接:http://pointtang.github.io/2019/01/07/%E6%97%B6%E9%97%B4%E3%80%81%E6%97%B6%E5%8C%BA%E3%80%81%E6%97%B6%E9%97%B4%E6%88%B3/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录