私はAndroidアプリケーションに取り組んでおり、ローカル時間(デバイス時間)をUTCに変換してデータベースに保存したいです。データベースから取得した後、再度変換して表示する必要がありますデバイスのタイムゾーンJavaでこれを行う方法を提案できる人はいますか?
これらの2つの方法を使用して現地時間をGMT/UTCに変換し、その逆も問題なく機能します。
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;
}
このメソッドにデバイスのローカル時間に変換するGMT/UTC日付を渡します。
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
}
受け入れられた答えの簡略化された要約版:
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()));
}
これを試して:
// UTCからローカル形式に変換
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;
}
//ローカル日付を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);
}
次のようなものを試して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());
これはあなたのコメントから選ぶ:
出力:
1:43 PM Mon UTC
このために、->もう一度変換して、デバイスの時間に表示します
更新:
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));
出力:
7:30 PM Mon GMT + 05:30
Uは次のように表示されます。
Time.getCurrentTimezone()
タイムゾーンを取得し、
Calendar c = Calendar.getInstance(); int seconds = c.get(Calendar.SECOND)
uTCの時間を秒単位で取得します。もちろん、値を変更して別のユニットで取得することもできます。
現在のUTCを取得:
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);
}