Domanda

Ho la mia app ospitato in un server di Londra. Sono a Madrid, Spagna. Così il fuso orario è -2 ore.

Come posso ottenere la data / ora corrente con il mio fuso orario.

Date curr_date = new Date(System.currentTimeMillis());

es.

Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));

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();
È stato utile?

Soluzione

Date è sempre a base di UTC ... o il tempo-zona neutra, a seconda di come si vuole per vederlo. Un Date solo rappresenta un punto nel tempo; è indipendente dal tempo orario, solo un numero di millisecondi da epoch Unix. Non c'è alcuna nozione di un "un'istanza locale di Date." Utilizzare Date in combinazione con Calendar e / o TimeZone.getDefault() di utilizzare una " locale" fuso orario. Utilizzare TimeZone.getTimeZone("Europe/Madrid") per ottenere il fuso orario di Madrid.

... o utilizzare Joda Tempo , che tende a rendere il tutto più chiaro, IMO. In Joda Ora devi usare un valore DateTime, che è un istante di tempo ad un particolare sistema di calendario e il fuso orario .

In Java 8 usereste java.time.ZonedDateTime, che è l'equivalente di Java 8 DateTime di Joda Time.

Altri suggerimenti

Come già detto Jon Skeet, java.util.Date non ha un fuso orario. Un oggetto Date rappresenta un numero di millisecondi dal 1 gennaio 1970, 12:00 AM UTC. Non contiene informazioni sul fuso orario.

Quando si formatta un oggetto Date in una stringa, per esempio usando SimpleDateFormat, quindi è possibile impostare il fuso orario sull'oggetto DateFormat per farle sapere in quale fuso orario si desidera visualizzare la data e l'ora:

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));

Se si desidera che il fuso orario locale del computer che il programma è in esecuzione, l'uso:

df.setTimeZone(TimeZone.getDefault());

Calendario è semplice:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();

Con il java.time classi integrate in Java 8 e versioni successive:

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]
    }

Controlla questo può essere utile. Funziona bene per me. Codice anche coperti legale

    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); 

Si potrebbe utilizzare JodaTime per questo. Java.util.Date è molto limitata per quanto riguarda il fuso orario.

non ho potuto farlo funzionare utilizzando calendario. Devi usare 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());

Ecco un esempio:

Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();

Ecco alcuni passi per trovare il tempo per la vostra zona:

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));  
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top