2012-02-06 11 views

Odpowiedz

11
java.util.TimeZone tz = java.util.TimeZone.getTimeZone("GMT+1"); 
java.util.Calendar c = java.util.Calendar.getInstance(tz); 

System.out.println(c.get(java.util.Calendar.HOUR_OF_DAY)+":"+c.get(java.util.Calendar.MINUTE)+":"+c.get(java.util.Calendar.SECOND)); 
12

ja zachęcam, aby sprawdzić Joda czasie alternatywę (ale bardzo popularne) do standardowego daty i czasu Java API:

http://joda-time.sourceforge.net/index.html

Korzystanie Joda czas, myślę, że to jest to, czego co:

import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 

public class TimeZoneDemo { 

    public static void main(String[] args) { 

    DateTime now = new DateTime(System.currentTimeMillis(), DateTimeZone.forID("UTC")); 
    System.out.println("Current time is: " + now); 
    } 
} 

trzeba tylko wiedzieć, standardowy identyfikator strefy czasowej w kwestii, takich jak UTC.

+2

Dzięki za odpowiedzi . Piszę małą klasę i nie chcę importować pakietu joda dla tej małej klasy. Czy możesz zaproponować inny sposób? Jeszcze raz dziękuję – Raj

4

Napisałem następujący program, aby uzyskać czas dla wszystkich stref czasowych dostępnych sprawdzić, czy to pomaga ...

String[] zoneIds = TimeZone.getAvailableIDs(); 
    for (int i = 0; i < zoneIds.length; i++) { 
    TimeZone tz = TimeZone.getTimeZone(zoneIds[i]); 
    System.out.print(tz.getID() + " " + tz.getDisplayName()); 
     Calendar calTZ = new GregorianCalendar(tz); 
     calTZ.setTimeInMillis(new Date().getTime()); 
     Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.YEAR, calTZ.get(Calendar.YEAR)); 
     cal.set(Calendar.MONTH, calTZ.get(Calendar.MONTH)); 
     cal.set(Calendar.DAY_OF_MONTH, calTZ.get(Calendar.DAY_OF_MONTH)); 
     cal.set(Calendar.HOUR_OF_DAY, calTZ.get(Calendar.HOUR_OF_DAY)); 
     cal.set(Calendar.MINUTE, calTZ.get(Calendar.MINUTE)); 
     cal.set(Calendar.SECOND, calTZ.get(Calendar.SECOND)); 
     cal.set(Calendar.MILLISECOND, calTZ.get(Calendar.MILLISECOND)); 
    System.out.println(" "+cal.getTime()); 
2

sprawdzić. mam nadzieję, że to pomoże.

TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); 
    Calendar cal = Calendar.getInstance(); 

    int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000)); 

    int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000)); 

    TimeZone tz1 = TimeZone.getTimeZone("US/Central"); 
    String ss =cal.getTimeZone().getDisplayName(); 

    System.out.println("Local Time Zone : " + ss); 
    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); 

    cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset())); 
    //cal.add(Calendar.HOUR,- LocalOffSethrs); 

    cal.add(Calendar.MILLISECOND, tz.getRawOffset()); 
    Date dt = new Date(cal.getTimeInMillis());     
    System.out.println("After adjusting offset Acctual China Time :" + dt); 
+4

zapoznaj się z konwencjami nazewnictwa java i trzymaj się ich – kleopatra

1
import java.text.SimpleDateFormat; 
import java.util.GregorianCalendar; 

SimpleDateFormat dateFormat = new SimpleDateFormat(); 
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Seoul")); 
GregorianCalendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, 0); 

System.out.println(dateFormat.format(cal.getTime())); 
6

Java 1.8 oferuje kilka nowych klas w pakiecie java.time:

package learning.java8; 

import java.time.Instant; 
import java.time.ZoneId; 
import java.time.ZonedDateTime; 
import java.time.format.DateTimeFormatter; 

import org.junit.Test; 

public class JavaTimeLT { 

    @Test 
    public void zonedDataTimeExample() { 
     final ZoneId zoneId = ZoneId.of("Europe/Zurich"); 
     final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(), zoneId); 
     System.out.println(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME)); 
    } 
} 
0

W Javie 8 można wykorzystać metodę ZonedDateTime.now(ZoneId zone):

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); 
LocalTime localTime = zonedDateTime.toLocalTime(); 

System.out.println(localTime); 
Powiązane problemy