java - 关于java日历功能的问题

标签 java internationalization calendar timezone date-format

我这样声明 CalendarSimpleDateFormat:

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/

相关文章:

java - Retrofit 2 类文件问题

facebook - 如何设置 og :url when a locale is required?

ios - 保存/编辑重复日历事件的最佳方法

java - 使用 JNA 操作 'Internet Explorer_server' 中的 HTML 元素

java - 在 Tomcat 中运行后台 Java 程序

java - 正则表达式将以下行拆分为各个字段?

node.js - NestJS 的自以为是的 i18n

testing - 什么是火鸡测试?

asp.net - 动态添加CalendarExtender到Textbox子类服务器控件?

html - 在 Sharepoint 日历中将一天变灰