android unix时间,android: 日期转Unix时间戳,Unix时间戳转日期,带时区

r囧r小猫 2022-10-05 01:52 391阅读 0赞

1、UTC时间&GMT时间

UTC时间是时间标准时间(Universal Time Coordinated),UTC是根据原子钟来计算时间,误差非常小。

UTC也是指零时区的时间,如果要表示其他时区的时间,这里要注意没有UTC+0800或者UTC+8这样的表示方式(至少Java里面没有,一般用于口头表示),只有Asia/Shanghai这样的表示方式,详细的时区列表参考这个文档时区列表。

GMT时间是根据地球的自转和公转来计算时间,老的时间计量标准,这里我们不过多讨论

2、表达时间方式

我们一般表示时间都会带格式以方便理解,例如时间表达式是’2018-09-12 08:00:00’,因为我们在东八区,所以默认是:北京时间2018年9月12号8点整。但是如果是一个美国人看到这个时间,就会认为是美国东部or西部时间的2018年9月12号8点整。所以从这种表达方式很不准确,因为没有指明到底是哪个时区的时间!!!!

所以准确的表达时间必须带有时区,例如2018-09-12 08:00:00+0800,表达了Asia/Shanghai这个时区的时间2018年9月12号8点整。这里要注意+0800并不是表示加8小时的意思,只是表示这个时间’2018-09-12 08:00:00’是东八区Asia/Shanghai的时间,仅此而已。

3、UTC时间的时间戳

讲清楚了时间表达方式,再讲时间戳。其实时间戳是没有时区概念的,或者说时间戳只能是0时区的。时间戳是从1970-01-1 00:00:00+0000开始的(原因大家都知道),也就是在’1970-01-1 00:00:00+0000’这个时间点,时间戳是0。再换句话说在’1970-01-1 08:00:00+0800’时间戳也是0。这也是Java里时间组件的默认方式,不管用户输入的人类可识别的时间是什么格式,在内部统一存的是时间戳。

例如时间是’2018-09-01 08:00:00+0800’,那么使用date.getTime()获取到时间戳是1535760000000;时间是’2018-09-01 00:00:00+0000’,获取到时间戳也是1535760000000。

try{

SimpleDateFormat sdf= new SimpleDateFormat(“yyyy-MM-dd HH:mm:ssZ”, Locale.getDefault());

Log.i(“xp.chen”, sdf.parse(“2018-09-01 08:00:00+0800”).getTime()+””);

Log.i(“xp.chen”, sdf.parse(“2018-09-01 00:00:00+0000”).getTime()+””);

Log.i(“xp.chen”, sdf.parse(“1970-01-01 00:00:00+0000”).getTime()+””);

}catch(ParseException e) {

e.printStackTrace();

}

运行结果:

2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 1535760000000

2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 1535760000000

2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 0

4、时间戳与日期之前的相互转换

【时间戳转日期】

long curTime = 1535760000000L;

String timeStr= new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss Z”, Locale.getDefault()).format(newDate(curTime));

Log.i(“xp.chen”, “timeStr: “+timeStr);

运行结果:

2019-05-08 16:14:58.573 22835-22835/? I/xp.chen: timeStr: 2018-09-01 08:00:00 +0800

【日期转时间戳】

try{

String src_dateStr= “2018-09-01 08:00:00 +0800”;

Calendar calendar=Calendar.getInstance();

calendar.setTime(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss Z”, Locale.getDefault()).parse(src_dateStr));long timeInMillis =calendar.getTimeInMillis();

Log.i(“xp.chen”, “timeInMillis: “+timeInMillis);

}catch(ParseException e) {

e.printStackTrace();

}

运行结果:

2019-05-08 16:14:58.573 22835-22835/? I/xp.chen: timeInMillis: 1535760000000

【获得当前日期字符串含时区】

public staticString getDateStrIncludeTimeZone() {

SimpleDateFormat sdf= new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss Z”, Locale.getDefault());return sdf.format(newDate());

}

发表评论

表情:
评论列表 (有 0 条评论,391人围观)

还没有评论,来说两句吧...

相关阅读

    相关 UNIX时间

    时间戳是文件属性中的创建、修改、和访问时间。数字时间戳服务是Web网站安全服务项目之一,能提供电子文件的日期和时间信息的安全保护。 时间戳的优点是: 可用变化的加密数值,防