2016-07-28 2 views
3

Ниже мой кодФормат XMLGregorianCalendar

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

Когда я печать СОП в последней строке выше кода я получаю выход как

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

Но Iam пытается получить выход в

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

Это не имеет смысла. datepart с часовым поясом ?! – Jens

+0

С помощью simpleedformat iam можно получить «2016-07-29 + 0530». Не могли бы вы сообщить мне, можем ли мы принести «:» между «05» и «30». Мой код ниже DateFormat dateFormat = новый SimpleDateFormat ("yyyy-MM-ddZ"); @Jens –

+0

@Jens Это имеет смысл, потому что ваше начало дня отличается от изменения смещения часового пояса. Имея 01:00 в одном часовом поясе, возможно, 23:00 в другом, и у вас другой день. – Alexander

ответ

0

Легче было бы восстановить функциональность JDK7. Вы должны знать, что новый XXX расчет основан на уже доступных полях Календарь класс. Они принимают Calendar.ZONE_OFFSET и Calendar.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-07-29 + 05: 30

+0

К сожалению, в версии Java 6 отсутствует ZoneOffset. Я бы использовал XXX, только если мне нужно использовать java 8, но это не так. –