2017-11-23 5 views
-3

Ich schreibe ein RssFeed mit Rom RSS und nach dem Aufruf der toString-Methode des StringWriter ändert es die TimeZone. Ich möchte eine feste Zeitzone und Zeit unabhängig von der Maschine haben, auf der der Code läuft.toString Methode von StringWriter ändert TimeZone

Vor dem Aufruf der Methode toString das Datum wie folgt aussieht:

Mon Nov 10 00:00:00 CET 2014 

Nach der toString-Methode aufrufen sieht es wie folgt aus:

Sun, 09 Nov 2014 23:00:00 GMT 

Es ist auch nicht alles ändern, wenn ich die Locale gesetzt direkt vor

Locale.setDefault(new Locale("en", "CA")); 
String rssFeedString = writer.toString(); 

Wie kann ich dieses Verhalten verhindern? Ich habe keinen direkten Zugriff auf DateFormater, weil es in der ROM RSS API ist.

SyndFeedOutput output = new SyndFeedOutput(); 
output.output(feed, writer); 
Locale.setDefault(new Locale("de", "DE")); 
String rssFeedString = writer.toString(); 
writer.close(); 
+3

Ihre Frage sehr unklar ist. Abgesehen von allem anderen haben Sie uns nicht ausdrücklich gesagt, was Sie formatieren. Meine * Vermutung * ist, dass es eine java.util.Date ist, aber das ist unklar. Bitte geben Sie eine [MCVE] an. –

+0

Err, nein. 'StringWriter' akkumuliert Zeichen in einem char-Array und seine' toString() 'Methode gibt diese Zeichen als' String' zurück. Es hat überhaupt nichts mit Zeitzonen zu tun. Deine Annahme ist lächerlich. – EJP

+0

https://github.com/rometools/rome/issues/188 Hier wird das Verhalten erläutert. – TimSchwalbe

Antwort

2

Betrachten Sie die toString() Methoden als informativ für Datum, Uhrzeit und Zahlen. Sie sollten sich nicht auf die Ausgabe verlassen, da sie abhängig vom Gebietsschema sein kann (Sie haben das bereits herausgefunden).

Ich schlage vor, Sie die Dateformat-Klasse das Datumsformat machen festgelegt in Bezug auf das Systemgebietsschema

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
// optionally you can set your timezone 
sdf.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(sdf.format(someDate)); 
Verwandte Themen