代码之家  ›  专栏  ›  技术社区  ›  Marcin

将字符串转换为公历日历

  •  17
  • Marcin  · 技术社区  · 17 年前

    我有一个来自邮件头的字符串,比如 Date: Mon, 27 Oct 2008 08:33:29 -0700 . 我需要的是一个公历的例子,它将代表同一时刻。就这么简单——我该怎么做?

    对于最快的——这是 正常工作:

    SimpleDateFormat format = ... // whatever you want
    Date date = format.parse(myString)
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(date)
    

    因为它将将时区规范为UTC(或者取决于Java版本的本地机器时间)。我需要calendar.getTimeZone().getRawOffset()返回 -7 * milisInAnHour .

    2 回复  |  直到 17 年前
        1
  •  15
  •   Jack Leow    17 年前

    如果可以的话,我建议你去Joda时间图书馆看看。当核心平台提供类似的功能时,我通常反对使用第三方库,但由于JoDA时间的作者也在JSR310后面,因此JoDA时间基本上将被卷入Java 7。

    http://joda-time.sourceforge.net/

    所以不管怎样,如果时间是一种选择,像这样 应该 工作:

    DateTimeFormatter formatter =
        DateTimeFormat.forPattern("your pattern").withOffsetParsed();
    DateTime dateTime = formatter.parseDateTime("your input");
    GregorianCalendar cal = dateTime.toGregorianCalendar();
    

    我希望这有帮助。

        2
  •  6
  •   Community Mohan Dere    9 年前

    而对于速度最快的人来说——这不会正常工作…… 因为它将将时区规范为UTC(或者取决于Java版本的本地机器时间)。我需要calendar.getTimeZone().getRawOffset()返回-7*milisinanhour。

    从技术上讲,这是可行的,因为当它返回一个时区等于当前系统时区的对象时,时间将被修改以考虑偏移量。

    此代码:

    String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
    DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
    Date parsed = df.parse(dateString);
    System.out.println("parsed date: " + parsed);
    
    Calendar newCalendar = Calendar.getInstance();
    newCalendar.setTime(parsed);
    

    输出:

    分析日期:2008年10月27日周一11:33:29

    这在技术上是正确的,因为我的系统时区是EDT/UTC减去四个小时(比你提前三个小时)。如果将时间表示为1970年1月1日以来的毫秒数,则为格林威治标准时间00:00:00(这是 Date 对象存储它的日期/时间),然后这些日期/时间相等,只是时区不同。

    你的问题真的是 如何将日期/日历转换为时区? 为此,请看一下我对前一个问题的回答。 How to handle calendar TimeZones using Java?

    推荐文章