2013-04-26 106 views
-1

我有一个奇怪的情况与Java日历。我正在使用推土机映射器来映射对象。日历问题与时区

我想写一个方法,将该对象转换为以下格式。 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 - 因为我们设置时区格林威治标准时间,(9.30 - 5.30 = 4.00)

我想我的对象具有相同的格式和value.if我不设置TimeZone格林尼治标准时间,它会显示为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) 

那么works.But,如果这是任何其他地方跑,相差不会5.30.So我不能添加5.30 calenderget

有什么办法来摆脱这个问题的? 我想返回日历对象。

任何建议或帮助,将不胜感激

回答

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); 
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