Je travaille sur Android, et je veux convertir l'heure locale (heure de l'appareil) en UTC et l'enregistrer dans la base de données. Après l'avoir récupérée de la base de données, je dois la convertir à nouveau et l'afficher dans le fuseau horaire de l'appareil. Quelqu'un peut-il suggérer comment procéder en Java?
J'ai converti l'heure locale en GMT/UTC et vice versa en utilisant ces deux méthodes et cela fonctionne très bien sans aucun problème pour moi.
public static Date localToGMT() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gmt = new Date(sdf.format(date));
return gmt;
}
passez la date GMT/UTC que vous souhaitez convertir en heure locale de l'appareil à cette méthode:
public static Date gmttoLocalDate(Date date) {
String timeZone = Calendar.getInstance().getTimeZone().getID();
Date local = new Date(date.getTime() + TimeZone.getTimeZone(timeZone).getOffset(date.getTime()));
return local
}
Une version simplifiée et condensée de la réponse acceptée:
public static Date dateFromUTC(Date date){
return new Date(date.getTime() + Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}
public static Date dateToUTC(Date date){
return new Date(date.getTime() - Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}
Essaye ça:
// convertir au format UTC au format local
public Date getUTCToLocalDate(String date) {
Date inputDate = new Date();
if (date != null && !date.isEmpty()) {
@SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
inputDate = simpleDateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
return inputDate;
}
// convertir la date locale en UTC
public String getLocalToUTCDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
Date time = calendar.getTime();
@SuppressLint("SimpleDateFormat") SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
return outputFmt.format(time);
}
vous pouvez essayer quelque chose comme ceci à insérer dans DB:
SimpleDateFormat f = new SimpleDateFormat("h:mm a E zz");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
String dd = f.format(new Date());
Cette option de votre commentaire:
SORTIE:
1:43 PM lun UTC
Pour cela, -> reconvertissez-le et affichez-le dans le temps de l'appareil
MISE À JOUR:
String dd = f.format(new Date());
Date date = null;
DateFormat sdf = new SimpleDateFormat("h:mm a E zz");
try {
date = sdf.parse(dd);
}catch (Exception e){
}
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(sdf.format(date));
SORTIE:
7:30 PM lun GMT + 05: 30
U peut s'afficher comme ceci.
Time.getCurrentTimezone()
vous obtiendrez le fuseau horaire et
Calendar c = Calendar.getInstance(); int seconds = c.get(Calendar.SECOND)
vous obtiendrez le temps en UTC en quelques secondes. Bien sûr, vous pouvez modifier la valeur pour l'obtenir dans une autre unité.
Obtenez l'UTC actuel:
public String getCurrentUTC(){
Date time = Calendar.getInstance().getTime();
SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
return outputFmt.format(time);
}