我这样声明 Calendar
和 SimpleDateFormat
:
calendar = Calendar.getInstance(TimeZone.getTimeZone("Malaysia"));
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MMMMM.dd hh:mm aaa");
或:
calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));
然后我称之为:
sdf.format(calendar.getTime());
但结果不在正确的时区(+8 小时)。可能是什么问题?
最佳答案
除非您要执行与日期/时间相关的计算,否则使用给定时区实例化日历是没有意义的。调用 Calendar 的 getTime()
方法后,您将收到 Date
对象,无论哪种方式,它都是无时区的(实际上是基于 GMT)。
您需要做的是为格式化程序设置 TimeZone
。也不要为传递您自己的格式而烦恼,已经有一个内置的:
// get current time
// you could just as well use Date now = new Date();
Calendar now = Calendar.getInstance();
// Locale for formatter
Locale malaysianLocale = new Locale("ms", "MY");
// Default date and time format for Malaysia
DateFormat defaultMalaysianFormatter = DateFormat.getDateTimeInstance(
DateFormat.DEFAULT, DateFormat.DEFAULT, malaysianLocale);
// This step is crucial
TimeZone malaysianTimeZone = TimeZone.getTimeZone("Asia/Kuala_Lumpur");
defaultMalaysianFormatter.setTimeZone(malaysianTimeZone);
System.out.println(defaultMalaysianFormatter.format(now.getTime()));
这会打印类似 10 Mei 2011 2:30:05 AM
的内容,我相信这是您想要的结果。
关于java - 关于java日历功能的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932083/