日历问题与时区

时间:2013-04-26 11:04:11

标签: java calendar dozer

我遇到了Java Calendar的奇怪情况。我正在使用推土机映射器来映射对象。

我想编写一个将此对象转换为以下格式的方法。 yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

说元素2010-11-11T09:30:47.000Z

public Calender getValue(Date source,Calender c) {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendar.setTime(source);
return calendar;
}

当我运行程序时,它正在打印 2010-11-11T04:00:47.000Z - 因为我们将时区设置为GMT,(9.30 - 5.30 = 4.00)

我希望我的对象具有相同的格式和值。如果我没有将TimeZone设置为GMT,它将显示为2008-11-21T09:30:47.000 + 05:30。

我希望它为2010-11-11T09:30:47.000Z。

我尝试将5.30添加到日历中。

    calendar.add(Calendar.HOUR, 5);
    calendar.add(Calendar.MINUTE, 30)

然后它有效。但如果这是从任何其他地方运行,差异将不是5.30。所以我不能将5.30添加到日历

有没有办法摆脱这个问题? 我想返回Calender对象。

非常感谢任何建议或帮助

2 个答案:

答案 0 :(得分:2)

使用模式。 F.E:

String pattern = "yyyy-MM-dd'T'HH:mm:ssZ";
DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern);

此外,

SimpleDateFormat dateformatyyyyMMdd = new SimpleDateFormat("yyyyMMdd");
String date_to_string = dateformatyyyyMMdd.format(dateNow);

答案 1 :(得分:0)

你可以像这样使用SimpleDateFormat。

   SimpleDateFormat formatter, FORMATTER;
   formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
   String oldDate = "2011-03-10T11:54:30.207Z";
   Date date = formatter.parse(oldDate.substring(0, 24));
   FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
   System.out.println("OldDate-->"+oldDate);
   System.out.println("NewDate-->"+FORMATTER.format(date));

输出OldDate - > 2011-03-10T11:54:30.207Z NewDate - > 10-Mar-2011 11:54:30.207