2009-03-06 6 views
1

Ich habe eine Anforderung, das Kalenderobjekt mit der Zeitzone zu senden, wie Tue Mar 03 13:43:00. Ich weiß, dass Kalender-Objekt immer mit Tue Mar 03 13:43:00 CST 2009 zurückkehren, also wie kann ich es ohne die Zeitzone erstellen?Ist es möglich, ein Kalender-Objekt wie Di Mär 03 13:43:00 (ohne Zeitzone) zu erstellen?

+0

Mit oder ohne Zeitzone, was ist das? Du fragst und sein Titel widerspricht sich. – bendin

+0

@kamal: Ich habe versucht, Ihre Frage zu klären. Wenn ich es falsch verstanden habe, korrigiere es bitte. –

+0

Ich suche nach einem Kalenderobjekt ohne Zeitzone. –

Antwort

1

Sie können die Klasse DateFormat (genauer die Betonunterklasse SimpleDateFormat) verwenden, um das Datum wie gewünscht zu formatieren. Hier ein Beispiel:

Calendar cal = Calendar.getInstance(); 
DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss"); 

String dateString = format.format(cal.getTime())); 

Drucke:

Fri Mar 06 15:50:26
+0

+1 Verwenden Sie niemals Calendar.toString(); Verwenden Sie immer einen Formatierer. –

+0

Danke für die Antwort, aber die Dienste, die ich anrufe, sucht nach Kalender-Objekt, so dass ich DateFormat nicht verwenden kann ... –

+0

Calendar.getTime() gibt ein Date-Objekt zurück .. siehe Code, den ich gerade gepostet habe. – Kip

0

Sie können ein einfaches Date-Objekt verwenden, verwendet wird;

Date d = new Date(); 
Date d2 = calendar.getTime(); 

Oder die noch einfachere, Zeit in Millisekunden.

long time = System.currentTimeMillis(); 

Um Verwirrung über Zeitzonen zu vermeiden, schlage ich vor, die Lagerung und alle Datum/Zeit als Standardzeitzone einstellen, wie GMT + 0 und dann je nach Bedarf der Zeit für die Anzeige usw. konvertieren.

0

Nachdem Sie Ihre Frage und Ihre Kommentare zu meiner anderen Antwort erneut gelesen haben, klingt das Problem, dass das Ergebnis ein Kalenderobjekt und kein String sein soll. Es geht also nicht darum, die String-Darstellung des Kalenders zu formatieren.

In diesem Fall ist das, was Sie fragen, technisch unmöglich: Alle Implementierungen der Calendar-Klasse existieren als interne Zeit, die als die Anzahl der Millisekunden seit der Unix-Epoche gespeichert wird (1. Januar 1970 00:00 GMT) . Die Uhrzeit "5:00 Uhr" in Boston unterscheidet sich von "5:00 Uhr" in Seattle - sie haben unterschiedliche interne Zeitstempel.

Ihre beste Wette wäre, die gleiche Zeitzone überall, zu verwenden und wahrscheinlich GMT am meisten Sinn macht zu diesem Zweck:

cal.setTimeZone(TimeZone.getTimeZone("GMT+0000")); 
1

Es ist nicht möglich, ohne Time-Zone ein Calendar-Objekt zu haben. Wirklich, das ergibt keinen Sinn - der Kalender möchte "a specific instant in time" darstellen - wie können Sie eine Instanz in der Zeit darstellen, ohne zu wissen, in welcher TimeZone Sie sich befinden?

So gibt es ein paar Dinge zu beachten:

  1. Sie sagen, Sie brauchen diesen Kalender zu einer anderen Komponente zu übergeben - nicht, dass API egal, was die Time-Zone Kalender sind in? Wird diese API die TimeZone-Einstellung ignorieren, um einen Zeitunterschied zu ihrer eigenen lokalen Zeitzone usw. zu berechnen?
  2. Ist Ihnen bewusst, dass Sie die Zeitzone einer Kalenderinstanz leicht ändern können?

    Calendar cal = Calendar.getInstance(); 
    cal.setTimeZone(TimeZone.getDefault()); // returns default TimeZone for your system 
    cal.setTimeZone(TimeZone.getTimeZone("EST")); // Eastern Standard Time 
    cal.setTimeZone(TimeZone.getTimeZone("Asia/Kolkota"); // UTC+5:30 
    

Javadocs auf Calendar, TimeZone.

+0

BTW sieht aus wie Calendar.setTimeZone (null) würde einige Fehler verursachen; Dies scheint die Vorstellung zu unterstützen, dass ein Kalender sehr eng mit seiner TimeZone-Referenz verknüpft ist und diese benötigt. –