0

私は2つの関数を書きました-today()そしてtodayUTC()-として:

public static Date today() {
  Calendar cal = Calendar.getInstance();
  return cal.getTime();
}

public static Date todayUTC() {
  Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
  return cal.getTime();
}

しかし、これらの関数の結果を次のように使用して印刷すると、次のようになります。

public void todayTest() {
  Date date1 = OOTBFunctions.today();
  System.out.println("today: "+date1);

  Date dateUTC1 = OOTBFunctions.todayUTC();
  System.out.println("todayUTC: "+dateUTC1);
}

両方のステートメントが同じ値を出力することを確認しました。

today: Thu Aug 30 14:48:56 PDT 2012
todayUTC: Thu Aug 30 14:48:56 PDT 2012

誰かが私がローカルタイムゾーンの日付を取得しているというUTC関数に欠けているものを提案できますか?

4

2 に答える 2

3

Javaは印刷中にデフォルトのロケールを使用するため、その動作が見られます。以下のようなコードを使用して、必要なロケール/フォーマットでフォーマットおよび印刷します。覚えて

  • Dateオブジェクトを作成すると、常にUTCになります。
  • ユーザーのロケールに日付を表​​示します。
  • 日付をUTCで保存します。

コード

final SimpleDateFormat sdf = new SimpleDateFormat("the format you want");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());

today()メソッドとtodayUTC()メソッドの両方は必要ありません。以下を維持し、好き

public static Date nowInUTC() 
{
  return new Date();
}

何もテストする必要はありません。

于 2012-08-30T22:03:52.780 に答える
0

どちらのメソッドも同じ値を返します。Dateオブジェクトには(とは異なり)タイムゾーンの概念はありませんCalendar。Aは、1970年1月1日午前0時(UTC)からのミリ秒数として内部に保存された瞬間を表しますDate 事実上、次と同等の2つの方法があります。

return new Date(System.currentTimeMillis());

Date.toString()常にシステムのデフォルトのタイムゾーンを使用します。

タイムゾーンで日付/時刻を維持する場合は、を使用することを検討してCalendarください。タイムゾーン内の特定の瞬間をフォーマットする場合は、タイムゾーンSimpleDateFormatを設定して使用します。

理想的には、代わりに、またはそれでもJodaTimeを使用するように変更します。これははるかにクリーンなAPIです。DateCalendar

于 2012-08-30T22:07:36.120 に答える