我想转换ms-since-1970-timestamp
到带有时区的日期(德国)。
这里有两种有效的代码变体 - 至少,我记得使用过它并且它有效:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
public class TestDate {
public static void main(String[] args) {
Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("Germany"), Locale.GERMANY);
Date d = new Date();
cal.setTime(d);
System.out.println(String.format("%02d.%02d.%04d %02d:%02d:%02d",
cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.MONTH)+1, cal.get(Calendar.YEAR),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)));
SimpleDateFormat df = new SimpleDateFormat( "dd.MM.yyyy HH:mm:ss.S" );
df.setTimeZone(TimeZone.getTimeZone("Germany"));
System.out.println(df.format(d));
}
}
真的很奇怪,因为我找不到2个小时时差的原因。
它应该是:16:05:20
代码打印:14:05:20
在这两种变体中。
有人可以帮助我并告诉我这里出了什么问题吗?
这就是问题:
TimeZone.getTimeZone("Germany")
没有这样的时区 ID,因此 Java 以其无限的智慧决定只返回 UTC,而不告诉您有什么问题。试试这个:
TimeZone.getTimeZone("Europe/Berlin")
维基百科有一个IANA 时区 ID 列表 https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones,但它有点过时了(在撰写本文时);这IANA 数据 http://www.iana.org/time-zones是最新的,但不太容易浏览......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)