インド標準時(IST)は、グリニッジ標準時より5:30時間(5時間30分)進んでいます。GMT+5.5として表示します。
この値(上記の場合、値= 5.5)をタイムゾーンで見つける方法はありますか?
私のAndroidアプリでは、デバイスのタイムゾーンを取得できます。しかし、デバイスのタイムゾーンを使用してこの値を取得するにはどうすればよいですか?
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);
それはあなたのために働くでしょう。
Timezoneクラスを確認してください。生のオフセットは、ミリ秒単位で必要なものです。あなたはそれを時間単位の値に簡単に変換することができます。
long rawOffset = TimeZone.getDefault().getRawOffset();
http://developer.android.com/reference/java/util/TimeZone.html#getRawOffset()を参照してください
デバイスのタイムゾーンを使用してこの値を取得するにはどうすればよいですか
ZonedDateTime.
now(
ZoneId.systemDefault() // Or: ZoneId.of("Asia/Kolkata")
)
.getOffset()
.toString()
このコードがIdeOne.comでライブで実行されていることを確認してください。
+05:30
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+APIとAndroidプロジェクトでのThreeTenABPの使用方法を確認してください。
試す:
TimeZone.getDefault();
getDefault()は、現在のデバイスのタイムゾーンの詳細を返します。次に、 getOffset()を呼び出して、UTCとこのタイムゾーンの差を取得できます。
このコードを試してください
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
これは実際に私が必要なものです。
double rawOffset = TimeZone.getDefault().getRawOffset();
rawOffset = rawOffset / (60 * 60 * 1000);
System.out.println("rawOffset : " + rawOffset);