2016-07-28 95 views
3

下面是我的代码格式的XMLGregorianCalendar

GregorianCalendar gregory=new GregorianCalendar(); 
gregory.setTime(new Date()); 
XMLGregorianCalendar xmlGregorianCalendar=DatatypeFactory.newInstance().newXMLGregorianCalendar(gregory); 
System.out.println(xmlGregorianCalendar.toString()); 

当我打印在上面的代码中最后一行SOP我越来越喜欢

2016-07-28T15:25:47.064+05:30 

但是荫输出试图让输出

2016-07-28+05:30 

我已经尝试过不同的格式化程序,但没有运气。

任何建议将大大有益的,我

ATLEAST我们可以得到使用SimpleDateFormat的这种格式?

通过使用simpledateformat iam可以得到“2016-07-29 + 0530”。如果我们可以在“05”和“30”之间加入“:”,请让我知道。我下面

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddZ"); 

在Java版本7和8,可以通过代码使用下面

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddXXX"); 

,但不知道在Java 6版本

+1

这没有任何意义。带时区的日期? – Jens

+0

通过使用simpledateformat iam可以获得“2016-07-29 + 0530”。如果我们可以在“05”和“30”之间加入“:”,请让我知道。我的代码在DateFormat下面dateFormat = new SimpleDateFormat(“yyyy-MM-ddZ”); @Jens –

+0

@Jens它是有道理的,因为通过改变时区偏移量,你的一天的开始是不同的。在一个时区01:00可能在另一个时区23:00,而你也有不同的一天。 – Alexander

回答

0

,最简单的是重建JDK7功能。你必须知道,新的XXX计算是基于日历类的已有字段。 他们采取Calendar.ZONE_OFFSETCalendar.DST_OFFSET去从那里是这样的:

int totalOffset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); 

    StringBuilder sb = new StringBuilder(); 

    //handle zero offset 
    if (totalOffset == 0) { 
     sb.append('Z'); 
    } 

    //convert to minutes because timezones are minute based 
    totalOffset = totalOffset/60000; 
    char prefix = '-'; 
    if (totalOffset >= 0) { 
     prefix = '+'; 
    } 
    sb.append(prefix); 

    //if negative offset, invert now 
    totalOffset = Math.abs(totalOffset); 

    sb.append(String.format("%02d", (totalOffset/60))); 
    sb.append(':'); 
    sb.append(String.format("%02d", (totalOffset % 60))); 

    System.out.println(sb.toString()); 

我希望这个片段可以帮助你从那里走。

0

像这样获得?请注意,我没有使用格里高利不确定您是否需要特定的格里高利日历,在这种情况下您必须更改一下。

ZoneOffset myOffset = ZonedDateTime.now().getOffset(); 
System.out.println("ZoneOffset is " + myOffset.getId()); 
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String currentDate = dateFormat.format(new Date()); 
System.out.println(currentDate + myOffset.getId()); 

此打印:

ZoneOffset是05:30

2016年7月29日+ 05:30

+0

不幸的是,Java 6版本中没有ZoneOffset。如果我必须使用java 8,我将只使用XXX,但情况并非如此。 –

相关问题