public static void main(String[] args) throws ParseException {
SimpleDateFormat dt = new SimpleDateFormat("MM dd yy");
dt.setLenient(false);
dt.setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong"));
Date date = dt.parse("05 14 16");
System.out.println(date);
}
输出: Fri May 13 21:30:00 IST 2016
如果我尝试使用输出,它将切换到前一天而不是正确的一天。
这是预期的还是API的问题?
答案 0 :(得分:3)
这是预期的,Java中没有错误。
班级Date
不包含时区信息。自格林威治标准时间01-01-1970 00:00:00以来,java.util.Date
只不过是包装了几毫秒。它不记得它解析的字符串包含有关时区的信息。
当您在此处显示Date
时,例如通过(隐式)调用toString()
:
System.out.println(date);
它将以您系统的默认时区打印,在您的情况下为IST。
如果要在特定时区打印,请使用SimpleDateFormat
对象对其进行格式化,在SimpleDateFormat
对象上设置所需的时区。例如:
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z");
df..setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong"));
System.out.println(df.format(date));