web-dev-qa-db-ja.com

現地時間をUTCに変換、またはその逆

私はAndroidアプリケーションに取り組んでおり、ローカル時間(デバイス時間)をUTCに変換してデータベースに保存したいです。データベースから取得した後、再度変換して表示する必要がありますデバイスのタイムゾーンJavaでこれを行う方法を提案できる人はいますか?

17
Dyo

これらの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
}
23
Dyo

受け入れられた答えの簡略化された要約版:

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()));
}
13
Chris Stillwell

これを試して:
// 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);
}
3
Neelesh Atale

次のようなものを試して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は次のように表示されます。

2
User Learning

Time.getCurrentTimezone()

タイムゾーンを取得し、

Calendar c = Calendar.getInstance(); int seconds = c.get(Calendar.SECOND)

uTCの時間を秒単位で取得します。もちろん、値を変更して別のユニットで取得することもできます。

1
der_Fidelis

現在の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);
}
0
SANAT