3

インド標準時(IST)は、グリニッジ標準時より5:30時間(5時間30分)進んでいます。GMT+5.5として表示します。

この値(上記の場合、値= 5.5)をタイムゾーンで見つける方法はありますか?

私のAndroidアプリでは、デバイスのタイムゾーンを取得できます。しかし、デバイスのタイムゾーンを使用してこの値を取得するにはどうすればよいですか?

4

6 に答える 6

2
double timezoneval = 0.0;
        Calendar cal = Calendar.getInstance();
        cal.set(mn.Year(), mn.Month(), mn.Day(), mn.Hour(), mn.minute(),
                (int) mn.second());
        TimeZone tz = TimeZone.getDefault();
        boolean t = tz.inDaylightTime(cal.getTime());
        if (t)
            timezoneval = ((TimeZone.getDefault().getRawOffset())
                    / (60 * 60 * 1000D) + (TimeZone.getDefault()
                    .getDSTSavings() / (60 * 60 * 1000D)));
        else
            timezoneval = ((TimeZone.getDefault().getRawOffset()) / (60 * 60 * 1000D));

このコードを試すことができます。これにより、タイムゾーンの値がわかります。別のタイムゾーン値が必要な場合。に変更 TimeZone tz = TimeZone.getDefault(); するだけ

TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");
        TimeZone.setDefault(tz);

それはあなたのために働くでしょう。

于 2013-03-21T09:38:24.127 に答える
1

Timezoneクラスを確認してください。生のオフセットは、ミリ秒単位で必要なものです。あなたはそれを時間単位の値に簡単に変換することができます。

long rawOffset = TimeZone.getDefault().getRawOffset();

http://developer.android.com/reference/java/util/TimeZone.html#getRawOffset()を参照してください

于 2013-03-21T07:23:26.987 に答える
1

tl; dr

デバイスのタイムゾーンを使用してこの値を取得するにはどうすればよいですか

ZonedDateTime.
now(
    ZoneId.systemDefault()  // Or: ZoneId.of("Asia/Kolkata") 
)
.getOffset()
.toString()

このコードがIdeOne.comでライブで実行されていることを確認してください

+05:30

java.time

java.time最新のAPIを使用したソリューション:

import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
        int seconds = zdt.getOffset().getTotalSeconds();
        System.out.println(seconds);

        // If required, convert it into hours
        double hours = seconds / 3600.0;
        System.out.println(hours);
    }
}

出力:

19800
5.5

最新の日時API *の詳細についてjava.timeは、Trail:DateTimeをご覧ください。


*何らかの理由で、Java6またはJava7に固執する必要がある場合は、 Java.time機能のほとんどをJava6および7にバックポートするThreeTen-Backportを使用できます。AndroidプロジェクトおよびAndroidAPIで作業している場合レベルはまだJava-8に準拠していません。脱糖によって利用可能なJava8+APIAndroidプロジェクトでのThreeTenABPの使用方法を確認してください。

于 2021-05-16T15:57:46.037 に答える
0

試す:

TimeZone.getDefault();

getDefault()は、現在のデバイスのタイムゾーンの詳細を返します。次に、 getOffset()を呼び出して、UTCとこのタイムゾーンの差を取得できます。

于 2013-03-21T07:07:15.763 に答える
0

このコードを試してください

 public class Sample {


public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        String dateStr = "2010-06-14 02:21:49-0400";
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
        TimeZone tz = TimeZone.getDefault();
        sdf.setTimeZone(tz);
        Date date = sdf.parse(dateStr);

        sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
        String newDateStr = sdf.format(date);

        System.out.println(newDateStr);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

出力は次のようになります

2010-06-14 08:21:49 AM

于 2013-03-21T07:08:39.333 に答える
-1

これは実際に私が必要なものです。

double rawOffset = TimeZone.getDefault().getRawOffset();

rawOffset = rawOffset / (60 * 60 * 1000);

System.out.println("rawOffset : " + rawOffset);
于 2013-03-21T09:38:31.270 に答える