代码之家  ›  专栏  ›  技术社区  ›  DD.

Java简单日期格式英国时间

  •  4
  • DD.  · 技术社区  · 14 年前

    我使用简单的日期格式允许用户指定在哪个时区发送数据:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,z");
    

    这很管用: 例如

    df.parse("2009-05-16 11:07:41,GMT");
    

    但是,如果有人总是在伦敦时间发送时间(即考虑到夏时制),那么要添加的适当时区字符串是什么? e、 g.这不起作用:

    df.parse("2009-05-16 11:07:41,Western European Time");  
    System.out.println(date);
    Sat May 16 12:07:41 BST 2009
    

    我想把时间和英国的夏令时相匹配。

    谢谢。

    3 回复  |  直到 14 年前
        1
  •  5
  •   b.roth    14 年前

    在夏令时 BST . 今年剩下的时间里 GMT .

    我建议您使用通用名称(全年),即 Europe/London . 你可以用这样的东西:

        String userInput = "2009-05-16 11:07:41,Europe/London";
        String[] tokens = userInput.split(",");
    
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        df.setTimeZone(TimeZone.getTimeZone(tokens[1]));
        System.out.println(df.parse(tokens[0]));
    

    这种情况下的输出是:

    Sat May 16 11:07:41 GMT+01:00 2009
    
        2
  •  0
  •   Jesper    14 年前

    那么你的问题是什么-什么身份证 TimeZone 你应该用吗?下面将打印所有可用时区标识符的列表:

    for (String id : TimeZone.getAvailableIDs()) {
        System.out.println(id);
    }
    
        3
  •  0
  •   richj    14 年前

    我不认为使用SimpleDateFormat就可以完成您想要的任务。时区.parse(字符串)仅接受时区,不接受时区ID,例如:

    Time Zone ID       Time Zone (Winter)      Time Zone (Summer)
    -------------------------------------------------------------
    Europe/London      GMT                     BST
    

    如果parse(…)接受Europe/London,那么春季的1小时将不是有效的Europe/London时间,秋季的1小时将映射到两个UTC时间。

    我认为最好的方法是遵循Bruno Rothgiesser的建议,但是您可以接受时区ID作为单独的用户输入,或者执行一个额外的字符串处理步骤,将时区ID与用户输入字符串分开,并使用它来计算用户可能指的是GMT还是BST去弄清楚他/她是什么意思——尽管这个想法中有一些假设。

    “用户可能的意思”算法必须处理两种特殊情况-您可以使用时区.inDaylightTime(日期)用户时间为+/-1小时,如果你可能有这些。