2010-11-28 4 views
1

J'ai une application mobile où je capture une date/heure et l'envoie en tant que milisecondes à une servlet. -Par example je capture 12:55 AM dans mon téléphone portable et l'envoie à mon serveur-Comment imprimer une date sans fuseau horaire?

Ainsi, je construis la date des milisecondes envoyées et l'imprime avec SimpleDateFormat mais le temps est différent, il imprime 8:55 AM . Je sais que le problème est parce que j'utilise 2 fuseaux horaires différents, ma question est: comment puis-je montrer cette heure sans appliquer n'importe quel fuseau horaire pour montrer la même heure?

Merci à l'avance

Répondre

3

Vous devez utiliser le calendrier pour changer le fuseau horaire, mais il n'y a pas d'API pour cela.

// Change a date in another timezone 
public static Date changeTimeZone(Date date, TimeZone zone) { 
    Calendar first = Calendar.getInstance(zone); 
    first.setTimeInMillis(date.getTime()); 

    Calendar output = Calendar.getInstance(); 
    output.set(Calendar.YEAR, first.get(Calendar.YEAR)); 
    output.set(Calendar.MONTH, first.get(Calendar.MONTH)); 
    output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH)); 
    output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY)); 
    output.set(Calendar.MINUTE, first.get(Calendar.MINUTE)); 
    output.set(Calendar.SECOND, first.get(Calendar.SECOND)); 
    output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND)); 

    return output.getTime(); 
} 

Lien: http://blog.vinodsingh.com/2009/03/date-and-timezone-in-java.html

Je pense que cela devrait fonctionner. Je ne l'ai pas testé intensivement.

2

Les objets Calendrier et Date stockent leurs informations de date en millisecondes par rapport à l'heure UTC.

(la différence, mesurée en millisecondes, entre l'heure et minuit, le 1er Janvier, 1970 UTC)

Cela signifie que les objets Calendrier/ne stockent pas des valeurs différentes pour différentes zones de temps. Ils utilisent toujours la même valeur en interne ... le format est ce qui change normalement.

Peut-être que vous pouvez utiliser un SimpleDateFormat dans votre fuseau horaire local/par défaut:

SimpleDateFormat sdf = new SimpleDateFormat("S") 
Date d = sdf.parse(milliseconds); 

Vous pouvez aussi changer le fuseau horaire du DateFormat jusqu'à ce qu'il corresponde à votre sortie prévue.

sdf.setTimeZone(TimeZone.getTimeZone("GMT-8")); 
System.out.println(sdf.toString()); 

sdf.setTimeZone(TimeZone.getTimeZone("GMT-4")); 
System.out.println(sdf.toString()); 
Questions connexes