1. 前言
本文主要讲,在Java中如何通过一个标准格式时间字符串("yyyy-MM-dd HH:mm:ss"),来获取其对应的各个时区的时间戳信息。
2. 代码示例
功能代码:
获取时间字符串对应的指定时区的时间戳
public static long getTimeZoneTimeStr(String dateStr,String timeZone) {
long result = 0L;
int year;
int month;
int day;
int hour;
int minute;
int second;
Calendar calendarTime = Calendar.getInstance();
TimeZone tz = TimeZone.getTimeZone(timeZone);
calendarTime.setTimeZone(tz);
if (null != dateStr && 14 == dateStr.length()) {
year = Integer.parseInt(dateStr.substring(0, 4));
month = Integer.parseInt(dateStr.substring(4, 6));
day = Integer.parseInt(dateStr.substring(6, 8));
hour = Integer.parseInt(dateStr.substring(8, 10));
minute = Integer.parseInt(dateStr.substring(10, 12));
second = Integer.parseInt(dateStr.substring(12, 14));
calendarTime.set(1, year);
calendarTime.set(2, month - 1);
calendarTime.set(5, day);
calendarTime.set(11, hour);
calendarTime.set(12, minute);
calendarTime.set(13, second);
result = calendarTime.getTime().getTime();
}else if (null != dateStr && 19 == dateStr.length()) {
year = Integer.parseInt(dateStr.substring(0, 4));
month = Integer.parseInt(dateStr.substring(5, 7));
day = Integer.parseInt(dateStr.substring(8, 10));
hour = Integer.parseInt(dateStr.substring(11, 13));
minute = Integer.parseInt(dateStr.substring(14, 16));
second = Integer.parseInt(dateStr.substring(17, 19));
calendarTime.set(1, year);
calendarTime.set(2, month - 1);
calendarTime.set(5, day);
calendarTime.set(11, hour);
calendarTime.set(12, minute);
calendarTime.set(13, second);
result = calendarTime.getTime().getTime();
}
return result;
}
调用示例:
public static void main(String[] args) {
System.out.println("-------------------- 2019-09-24 00:00:00 -----------------------");
System.out.println("local: "+generateDateStamp("2019-09-24 00:00:00"));
System.out.println("GMT+0800: "+getUTCTimeStr("2019-09-24 00:00:00","GMT+0800"));
System.out.println("GMT: "+getUTCTimeStr("2019-09-24 00:00:00","GMT"));
System.out.println("UTC: "+getUTCTimeStr("2019-09-24 00:00:00","UTC"));
System.out.println("-------------------- 2019-09-23 16:00:00 -----------------------");
System.out.println("local: "+generateDateStamp("2019-09-23 16:00:00"));
System.out.println("GMT+0800: "+getUTCTimeStr("2019-09-23 16:00:00","GMT+0800"));
System.out.println("GMT: "+getUTCTimeStr("2019-09-23 16:00:00","GMT"));
System.out.println("UTC: "+getUTCTimeStr("2019-09-23 16:00:00","UTC"));
}
程序运行结果:
-------------------- 2019-09-24 00:00:00 -----------------------
local: 1569254400094
GMT+0800: 1569254400118
GMT: 1569283200118
UTC: 1569283200119
-------------------- 2019-09-23 16:00:00 -----------------------
local: 1569225600119
GMT+0800: 1569225600119
GMT: 1569254400119
UTC: 1569254400119
3. 总结
运行结果可以看出,在Java中Date.getTime()获取到的时间戳其实是东8区的时间“2019-09-24 00:00:00”(即返回的是北京时间1970年01月1日0点0分0秒以来的毫秒数,对应UTC时间1970年01月1日8点0分0秒以来的毫秒数,其数值大小等于0时区的“2019-09-23 16:00:00”所对应的时间戳)所对应得时间戳。