Wie das aktuelle Datum und die Uhrzeit Ihrer Zeitzone in Java zu bekommen?
Frage
Ich habe meine App in einem Londoneren Server gehostet. Ich bin in Madrid, Spanien. So ist die Zeitzone ist -2 Stunden.
Wie kann ich die aktuelle Datum / Zeit mit meiner Zeitzone zu erhalten.
Date curr_date = new Date(System.currentTimeMillis());
z.
Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));
Mit Joda-Time
DateTimeZone zone = DateTimeZone.forID("Europe/Madrid");
DateTime dt = new DateTime(zone);
int day = dt.getDayOfMonth();
int year = dt.getYear();
int month = dt.getMonthOfYear();
int hours = dt.getHourOfDay();
int minutes = dt.getMinuteOfHour();
Lösung
Date
immer UTC-basierte ... oder Zeitzone neutral, je nachdem wie man es sehen will. Ein Date
nur einen Zeitpunkt darstellt; es ist unabhängig von der Zeitzone, nur eine Anzahl von Millisekunden seit Beginn der Unix-Epoche. Es gibt keinen Begriff einer „lokalen Instanz von Date
.“ Verwenden Date
in Verbindung mit Calendar
und / oder TimeZone.getDefault()
a "zu verwenden, local“Zeitzone. Verwenden Sie TimeZone.getTimeZone("Europe/Madrid")
, um die Zeitzone Madrid zu erhalten.
... oder benutzen Joda Zeit , die das Ganze klarer, IMO zu machen tendiert. In Joda Zeit würden Sie einen DateTime
Wert verwenden, der ein Zeitpunkt ist in einem bestimmten Kalendersystem und die Zeitzone .
In Java 8 würden Sie verwenden java.time.ZonedDateTime
, die die Java-8-Äquivalent von Joda Time DateTime
ist.
Andere Tipps
Wie Jon Skeet schon gesagt, java.util.Date
keine Zeitzone haben. Ein Date
Objekt stellt eine Anzahl von Millisekunden seit dem 1. Januar 1970, 0.00 Uhr, UTC. Dabei spielt es keine Zeitzoneninformationen enthalten.
Wenn Sie ein Objekt Date Format in eine Zeichenfolge, zum Beispiel durch SimpleDateFormat
verwenden, dann können Sie die Zeitzone auf dem DateFormat
Objekt festgelegt, um es in dem wir wissen, Zeitzone Sie das Datum und die Uhrzeit angezeigt werden soll:
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Use Madrid's time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));
System.out.println("Date and time in Madrid: " + df.format(date));
Wenn Sie die lokale Zeitzone des Computers möchten, dass Ihr Programm läuft auf, zu verwenden:
df.setTimeZone(TimeZone.getDefault());
Kalender ist einfach:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();
Mit der java.time Klassen gebaut in Java 8 und höher:
public static void main(String[] args) {
LocalDateTime localNow = LocalDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());
System.out.println(localNow);
// Prints current time of given zone without zone information : 2016-04-28T15:41:17.611
ZonedDateTime zoneNow = ZonedDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());
System.out.println(zoneNow);
// Prints current time of given zone with zone information : 2016-04-28T15:41:17.627+02:00[Europe/Madrid]
}
Überprüfen Sie dies hilfreich sein kann. Funktioniert gut für mich. Code auch Sommer bedeckt
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
Calendar cal = Calendar.getInstance();
// If needed in hours rather than milliseconds
int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000));
int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000));
int dts = cal.getTimeZone().getDSTSavings();
System.out.println("Local Time Zone : " + cal.getTimeZone().getDisplayName());
System.out.println("Local Day Light Time Saving : " + dts);
System.out.println("China Time : " + tz.getRawOffset());
System.out.println("Local Offset Time from GMT: " + LocalOffSethrs);
System.out.println("China Offset Time from GMT: " + ChinaOffSethrs);
// Adjust to GMT
cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset()));
// Adjust to Daylight Savings
cal.add(Calendar.MILLISECOND, - cal.getTimeZone().getDSTSavings());
// Adjust to Offset
cal.add(Calendar.MILLISECOND, tz.getRawOffset());
Date dt = new Date(cal.getTimeInMillis());
System.out.println("After adjusting offset Acctual China Time :" + dt);
Sie würden verwenden JodaTime dafür. Java.util.Date ist sehr begrenzt in Bezug auf Time-Zone.
Ich kann es nicht mit dem Kalender zu arbeiten. Sie haben Dateformat verwenden,
//Wednesday, July 20, 2011 3:54:44 PM PDT
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());
//Wednesday, July 20, 2011
df = DateFormat.getDateInstance(DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateString = df.format(new Date());
//3:54:44 PM PDT
df = DateFormat.getTimeInstance(DateFormat.FULL);
df.setTimeZone(Timezone.getTimeZone("PST"));
final String timeString = df.format(new Date());
Hier ist ein Beispiel:
Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();
Hier sind einige Schritte für die Suche nach Zeit für Ihre Zone:
Datum jetzt = new Date ();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println("timeZone.......-->>>>>>"+df.format(now));
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());