当前位置:  开发笔记 > 编程语言 > 正文

将字符串转换为GregorianCalendar

如何解决《将字符串转换为GregorianCalendar》经验,为你挑选了2个好方法。

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

而对于最快的 - 这不能正常工作:

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

因为它会将时区标准化为UTC(或您的本地计算机时间,具体取决于Java版本).我需要的是calendar.getTimeZone().getRawOffset()返回-7 * milisInAnHour.



1> Jack Leow..:

我推荐查看Joda Time库,如果这是一个选项.当核心平台提供类似功能时,我通常反对使用第三方库,但我之所以这样做是因为Joda Time的作者也落后于JSR310,而Joda Time基本上将最终归入Java 7.

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

所以无论如何,如果Joda Time是一个选项,这样的东西应该工作:

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

我希望这有帮助.



2> matt b..:

对于速度最快的 - 这不会正常工作......因为它会将时区标准化为UTC(或您的本地计算机时间,具体取决于Java版本).我需要的是calendar.getTimeZone().getRawOffset()来返回-7*milisInAnHour.

从技术上讲,这确实有效,因为虽然它将返回TimeZone等于当前系统TimeZone的对象,但是时间将被修改以考虑偏移量.

这段代码:

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 GMT(这是Date对象存储日期/时间的方式)以来的毫秒数,那么这些日期/时间是相等的,它只是不同的TimeZone.

您的问题是如何将日期/日历转换为我的时区?为此,请查看我对上一个问题的回答如何使用Java处理日历时区?

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有