J'ai une classe qui convertissent DateTime comme ci-dessous:Fuseau horaire indépendante
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateFormatConverter extends XmlAdapter<String, Date> {
private static final String XML_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS z";
@Override
public Date unmarshal(String xmlDate) throws Exception {
if (xmlDate == null || xmlDate.length() == 0)
{
return null;
}
SimpleDateFormat xmlDateFormat = new SimpleDateFormat(XML_DATE_PATTERN);
return xmlDateFormat.parse(xmlDate);
}
@Override
public String marshal(Date date) throws Exception {
if (date == null) {
return "";
}
SimpleDateFormat xmlDateFormat = new SimpleDateFormat(XML_DATE_PATTERN);
return xmlDateFormat.format(date);
}
}
Et mon test unitaire:
public void testMarshalDate() throws Exception {
DateFormatConverter converter = new DateFormatConverter();
SimpleDateFormat dateFormater = new SimpleDateFormat("MM-dd-yyyy");
Date date = dateFormater.parse("10-13-2011");
String marshalledDate = converter.marshal(date);
String timezone = Calendar.getInstance().getTimeZone().getDisplayName(true, TimeZone.SHORT);
System.out.println("Default Timezone:" + TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT));
System.out.println("Timezone of formatter:" + dateFormater.getTimeZone().getDisplayName(true, TimeZone.SHORT));
System.out.println("Timezone:" + timezone);
System.out.println("MarshaledDate: " + marshalledDate);
assertEquals("Marshalled date string is not expected.", "2011-10-13 00:00:00.000 " + timezone, marshalledDate);
}
La sortie dans la console est:
Default Timezone:ICST
Timezone of formatter:ICST
Timezone:ICST
MarshaledDate: 2011-10-13 00:00:00.000 ICT
Exception est :
Marshalled date string is not expected. expected:<...S...> but was:<......>
junit.framework.ComparisonFailure: Marshalled date string is not expected. expected:<...S...> but was:<......>
Pourquoi la date de marshaled a ICT de fuseau horaire tandis que le fuseau horaire par défaut de mon emplacement est ICST. Comment dois-je corriger pour rendre le Timezone indépendant?
Je l'ai corrigé, le problème est la cause de cette ligne: – Barcelona
Je l'ai corrigé, le problème est la cause de cette ligne: String timezone = Calendar.getInstance(). GetTimeZone () .getDisplayName (true, TimeZone.SHORT); Laissons true à false, car par défaut, SimpledateFormat utilise un format qui n'est pas en plein jour (dans ce cas, c'est ICT). – Barcelona