2012-09-05 2 views
-1

La Turquie a deux fuseaux horaires GMT + 2 et GMT + 3. Je veux changer les dates GMT + 2 en GMT + 3, mais je veux protéger les heures et les minutes en GMT + 2 TimeZone.Modifier le fuseau horaire d'un objet Date dans Java?

Je souhaite prendre des heures et des minutes, puis définir ces valeurs sur GMT + 3 Fuseau horaire. Au résultat, il ne doit pas y avoir de changement dans les heures et les minutes, mais le fuseau horaire doit être modifié uniquement. A la fonction toconvert, la date doit être au format GMT + 2, mais la valeur renvoyée doit être au format GMT + 3. Comment le faire clairement?

public static Date convertTimezone(Date toConvert) { 
    Date date = new Date(); 
    date.setYear(toConvert.getYear()); 
    date.setMonth(toConvert.getMonth()); 
    date.setHours(toConvert.getHours()); 
    date.setMinutes(toConvert.getMinutes()); 
    return date; 
} 
+1

La date ne dispose pas d'un concept de fuseau horaire ?? Peut-être utiliser le calendrier? – Adam

+0

Certains exemples d'entrées et de sorties souhaitées faciliteront la compréhension de ce que le code doit faire. – Affe

+0

J'ai résolu mon problème, j'ai appris: il s'agit de DateFormat pas Date. Merci à vous tous. – yetAnotherSE

Répondre

5

En Java, un Date représente un point dans le temps, rien d'autre. Cela signifie que Date ne sait rien sur la façon dont il est imprimé, le fuseau horaire etc ...

Fuseau horaire est donc quelque chose que vous définissez lors de l'impression la Date. La classe DateFormat est généralement utilisée pour l'impression et le fuseau horaire fait partie des propriétés que vous pouvez définir sur DateFormat. Généralement, les personnes utilisent la sous-classe SimpleDateFormat.

0

java.util.Date ne peut pas suivre les détails de votre fuseau horaire. Utiliser le calendrier à la place

0

Vous ne devriez pas utiliser un objet Date dans ce cas. Utilisez le calendrier à la place.

public static Calendar convertTimezone(Calendar toConvert) { 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+3")); 
    calendar.set(Calendar.YEAR, toConvert.get(Calendar.YEAR)); 
    calendar.set(Calendar.MONTH, toConvert.get(Calendar.MONTH)); 
    calendar.set(Calendar.DATE, toConvert.get(Calendar.DATE)); 
    calendar.set(Calendar.HOUR_OF_DAY, toConvert.get(Calendar.HOUR_OF_DAY)); 
    calendar.set(Calendar.MINUTE, toConvert.get(Calendar.MINUTE)); 
    return calendar; 
} 
+0

Pourquoi ne pas simplement utiliser calendar.setTime (toConvert.getTime())? – Adam

+0

@Adam Il voulait enregistrer l'heure de la date source. – sebastian

0

Vous pouvez utiliser Calender API pour convertir un fuseau horaire à l'autre

public static Date convertTimezone(Date toConvert) { 
    Calender calendar = Calendar.getInstance(); 
    calender.setTime(toConvert); 
    int hour = calender.get(Calender.HOUR_OF_DAY); 
    int minutes = calender.get(Calender.MINUTE); 
    Calendar ret = new GregorianCalender(timeZone); //timeZone is destination TimeZone 
    ret.setTimeInMillis(calendar.getTimeInMillis() + 
      timeZone.getOffset(calendar.getTimeInMillis()) - 
      TimeZone.getDefault().getOffset(calendar.getTimeInMillis())); 
    ret.set(Calender.HOUR_OD_DAY, hour); 
    ret.set(Calender.MINUTE, minutes); 

    return ret.getTime(); 
} 
Questions connexes