私はAndroid=を初めて使用し、現在、タイムゾーンを指定して現在の時刻を取得するという問題に直面しています。
"GMT-7"、つまり文字列の形式でタイムゾーンを取得します。システム時間があります。
上記の指定されたタイムゾーンで現在の時刻を取得するクリーンな方法はありますか?どんな助けでもありがたいです。おかげで、
編集:これをやろうとしている:
public String getTime(String timezone) {
Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone(timezone));
Date date = c.getTime();
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String strDate = df.format(date);
return c.getTime().toString();
}
私はそれをこのように機能させることができました:
TimeZone tz = TimeZone.getTimeZone("GMT+05:30");
Calendar c = Calendar.getInstance(tz);
String time = String.format("%02d" , c.get(Calendar.HOUR_OF_DAY))+":"+
String.format("%02d" , c.get(Calendar.MINUTE))+":"+
. String.format("%02d" , c.get(Calendar.SECOND))+":"+
. String.format("%03d" , c.get(Calendar.MILLISECOND));
Javaにバンドルされている古い日時クラスとサードパーティのJoda-Timeライブラリの両方が、Javaに組み込まれた Java.time フレームワークに取って代わられました8以降。これらのクラスは、Java.util.Date
などの古い厄介な日時クラスに取って代わります。 Oracleチュートリアル を参照してください。 Java.time機能の多くはJava 6&7で ThreeTen-Backport にバックポートされ、さらにAndroidで ThreeTenABP 。
ちなみに、-7
などの時間の1桁で offset-from-UTC を参照しないでください。これは非標準であり、さまざまなプロトコルやライブラリと互換性がありません。 -07
のように、常に2桁目をゼロで埋めます。
タイムゾーンではなくオフセットだけが必要な場合は、OffsetDateTime
クラスを使用します。
ZoneOffset offset = ZoneOffset.ofHours( -7 );
OffsetDateTime odt = OffsetDateTime.now( offset );
String output1 = odt.toLocalTime().toString();
System.out.println( "Current time in " + offset + ": " + output1 );
-07:00の現在の時刻:19:41:36.525
オフセットプラスである完全なタイムゾーンがある場合、夏時間(DST)などの異常を処理するための一連のルールではなく、単なるUTCからのオフセット、ZonedDateTime
クラスを使用します。
ZoneId denverTimeZone = ZoneId.of( "America/Denver" );
ZonedDateTime zdt = ZonedDateTime.now( denverTimeZone );
String output2 = zdt.toLocalTime().toString();
System.out.println( "Current time in " + denverTimeZone + ": " + output2 );
アメリカ/デンバーの現在の時刻:20:41:36.560
このコードはIdeone.comで動作しています を参照してください。
Androidでは Joda-Time 2.7を使用できます。日時の作業がはるかに簡単になります。
DateTimeZone zone = DateTimeZone.forID ( "America/Denver" );
DateTime dateTime = new DateTime ( zone );
String output = dateTime.toLocalTime ().toString ();
コンソールにダンプします。
System.out.println ( "zone: " + zone + " | dateTime: " + dateTime + " | output: " + output );
実行すると…
ゾーン:アメリカ/デンバー| dateTime:2016-07-11T20:50:17.668-06:00 |出力:20:50:17.668
私は強くお勧めします count-since - Epoch による時間による追跡。ただし、必要に応じて、 getMillis
メソッドを呼び出して、Joda-Timeの内部ミリ秒-以来のエポック( nix時間 、1970 UTCの最初の瞬間)を抽出できます。 DateTime
.
32ビットのlong
ではなく、64ビットのint
を使用していることに注意してください primitive types 。
Java.timeで。 Java.timeは最大でナノ秒の分解能を保持するため、ここでデータを失う可能性があることに注意してください。ナノ秒からミリ秒に移行するということは、1秒の小数の最大6桁を切り捨てることを意味します(ミリ秒の場合は3桁、ナノ秒の場合は9桁)。
long millis = Instant.now ().toEpochMilli ();
ジョーダタイム。
long millis = DateTime.now( denverTimeZone ).getMillis();
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Log.d("Time zone","="+tz.getDisplayName());
これを試して:
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setTimeZone(TimeZone.getTimeZone("YOUR_TIMEZONE"));
String strDate = df.format(date);
YOUR_TIMEZONEは、GMT、UTC、GMT-5などのようになります。
タイムゾーンをカレンダーではなくフォーマッターに設定します。
public String getTime(String timezone) {
Calendar c = Calendar.getInstance();
Date date = c.getTime(); //current date and time in UTC
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setTimeZone(TimeZone.getTimeZone(timezone)); //format in given timezone
String strDate = df.format(date);
return strDate;
}
はい、できます。 TimeZone setDefault()
メソッドを呼び出す。
public String getTime(String timezone) {
TimeZone defaultTz = TimeZone.getDefault();
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
String strDate = date.toString();
// Reset Back to System Default
TimeZone.setDefault(defaultTz);
return strDate;
}
私はもっと簡単な方法を見つけました。
最初に使用するアプリのタイムゾーン
TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
そしてCalanderを呼び出して内部で日付を取得します。これは、上記で設定されたデフォルトのタイムゾーンをアプリ全体で使用します。
Calendar cal = Calendar.getInstance();
Log.d("Los angeles time ",cal.getTime().toString());
タイムゾーンに基づいて現在の時刻が表示されます。
D/Los angeles time:Thu Jun 21 13:52:25 PDT 2018
TimeZone tz = TimeZone.getTimeZone(TimeZoneID);
Calendar c= Calendar.getInstance(tz);
String time=new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date(cal.getTimeInMillis()));
TimeZoneIDは、選択に応じて、以下のいずれかになります。
String[] ids=TimeZone.getAvailableIDs();
その後、上記の受け入れられた回答に従って時間を取得できます
String time = String.format("%02d" , c.get(Calendar.HOUR_OF_DAY))+":"+
String.format("%02d" , c.get(Calendar.MINUTE))+":"+
String.format("%02d" , c.get(Calendar.SECOND))+":"+
String.format("%03d" , c.get(Calendar.MILLISECOND));
最もクリーンな方法はSimpleDateFormatを使用することです
SimpleDateFormat = SimpleDateFormat("MMM\nd\nh:mm a", Locale.getDefault())
または、ロケールを指定できます
タイムゾーンとミリ秒の値を処理する1つの方法:
val currentDateTime = Calendar.getInstance().apply {
timeZone?.let {
val tzCalendar = Calendar.getInstance(it)
this.set(Calendar.HOUR_OF_DAY, tzCalendar.get(Calendar.HOUR_OF_DAY))
this.set(Calendar.MINUTE, tzCalendar.get(Calendar.MINUTE))
}
}.time
このようにして、特定のタイムゾーンの時間をミリ秒単位で取得します。