J'ai mon application hébergée sur un serveur London. Je suis à Madrid en Espagne. Donc, le fuseau horaire est -2 heures.
Comment puis-je obtenir la date/heure actuelle avec mon fuseau horaire.
Date curr_date = new Date(System.currentTimeMillis());
par exemple.
Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));
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();
Date
est toujours En fonction du temps UTC ... ou du fuseau horaire neutre, selon le mode d'affichage souhaité. Un Date
only représente un instant donné; il est indépendant du fuseau horaire, seulement quelques millisecondes depuis l’époque Unix. Il n'y a aucune notion d'une "instance locale de Date
." Utilisez Date
avec Calendar
et/ou TimeZone.getDefault()
pour utiliser un fuseau horaire "local". Utilisez TimeZone.getTimeZone("Europe/Madrid")
pour obtenir le fuseau horaire de Madrid.
... ou utilisez Joda Time , qui a tendance à rendre le tout plus clair, IMO. Dans Joda Time, vous utiliseriez une valeur DateTime
, qui correspond à un instant dans le temps dans un système de calendrier et un fuseau horaire particuliers.
En Java 8, vous utiliseriez Java.time.ZonedDateTime
, qui est l'équivalent Java 8 de DateTime
de Joda Time.
Comme Jon Skeet l'a déjà dit, Java.util.Date
n'a pas de fuseau horaire. Un objet Date
représente un nombre de millisecondes depuis le 1er janvier 1970 à 00h00, heure UTC. Il ne contient pas d'informations de fuseau horaire.
Lorsque vous formatez un objet Date en chaîne, par exemple à l'aide de SimpleDateFormat
, vous pouvez définir le fuseau horaire de l'objet DateFormat
pour lui indiquer dans quel fuseau horaire vous souhaitez afficher la date et l'heure:
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));
Si vous voulez le fuseau horaire local de l'ordinateur sur lequel votre programme est exécuté, utilisez:
df.setTimeZone(TimeZone.getDefault());
utiliser Calendrier est simple:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();
Avec les classes Java.time intégrées à Java 8 et versions ultérieures:
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]
}
Vérifiez que cela peut être utile. Travaille bien pour moi. Le code couvre également l'heure d'été
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);
Vous utiliseriez JodaTime pour cela. Java.util.Date est très limité en ce qui concerne TimeZone.
Je ne pouvais pas le faire fonctionner avec Calendar. Vous devez utiliser DateFormat
//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());
Voici un exemple:
Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();
Voici quelques étapes pour trouver du temps pour votre zone:
Date now = 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));