所以我在所有帖子中都读到了这个问题(例如,Convert timestamp to UTC timezone)。
我了解到这种转换的方法是:
SimpleDateFormat dfmaputo = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
dfmaputo.setTimeZone(TimeZone.getTimeZone("UTC"));
long unixtime = dfmaputo.parse(data.get(1)).getTime();
unixtime = unixtime / 1000;
output:
original date (Maputo Timezone) -- 11/5/2015 1:39:45 PM
unix timestamp in UTC --- 1446687585
data.get(1) is the string with the maputo datetime.
我不明白为什么我没有得到UTC值。当我转换unix时间戳时,我期望使用UTC,我使用马普托时区获得原始日期时间。
我错过了什么吗?
我是否需要先转换为我当地的时区而不是UTC?
编辑:解决方案
Calendar maputoDateTime = Calendar.getInstance(TimeZone.getTimeZone("Africa/Maputo"));
maputoDateTime.setTimeZone(TimeZone.getTimeZone("GMT"));
Long unixtimeGMT = maputoDateTime.getTimeInMillis() / 1000;
我应该使用Calendar。
而不是SimpleDateFormat首先,我需要设置输入日期的时区(非洲/马普托),然后将其设置为我需要的时间(GMT)。只有这样我才能获得正确的unix时间戳。
感谢How to change TIMEZONE for a java.util.Calendar/Date
中的@BastiM回复感谢您的回复和帮助。
答案 0 :(得分:0)
如果您将CAT
时区标识符添加到字符串末尾并且格式化程序掩码中有z
个字母,该怎么办?如果这就是你总是得到的和源数据没有给出时区值。
String sdt = "11/5/2015 11:39:45 PM CAT";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a z", Locale.US);
Date dt = sdf.parse(sdt);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(dt.getTime());
System.out.println(dt + ", utc=" + dt.getTime());
System.out.println(cal);