0
static String createUTCTime()
{
    Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
    cal.add(Calendar.SECOND, 10);

    SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    f.setCalendar(cal);

    return f.format(new Date());
}

基本的に私が以下でやりたいこと

Calendar objectX = createUTCTime();
//2012-Nov-27 18:35:40

x.addMS(10);
//2012-Nov-27 18:35:50

それらを操作するために UTC 時間をどのように処理しますか?

4

3 に答える 3

4

Dateは単なる時点であり、タイム ゾーン情報は保持されません。タイムゾーンと日付を操作する場合は、次のものが必要ですCalendar

Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
cal.add(Calendar.SECONDS, 10);

ここで注意が必要なのは、タイム ゾーンが失われるため( )に変換することはできません (ただし、同じ時点を表すことはできます)。UTC を使用するように構成された SimpleDateFormat` を作成する必要があります。Datecal.getTime()

一方、秒またはミリ秒のみが必要な場合Dateは問題ありません。正しいタイムゾーンでフォーマットすることを忘れないでください。ただし、時間と上記のすべてに使用しないでくださいDate(時間は 3600000 ミリ秒であるという仮定は、うるう秒、DST などのために間違っている場合があります)。

于 2012-11-27T18:49:55.400 に答える
2

あなたが何をしようとしているのかは本当にSimpleDateFormat.format不明ですが、さらに操作するオブジェクトを作成しようとしている場合は、それを文字列表現に変換するべきではありません。

正直なところ、日付と時刻を操作するための Java API はかなり壊れています。例えば:

DateTime x = new DateTime(DateTimeZone.UTC);
x = x.plusMillis(10);

Joda Time は、日付と時刻の不変Calendar型を多数提供します。これらは、可変型と型よりも可読性が大幅に優れていDateます。さらに、さまざまな種類の値を表すために、より多くの型をサポートしています。

本当に、疫病のように java.util.Date/Calendar を避けてください:)

于 2012-11-27T18:48:49.677 に答える
1

次のコードを使用できます。

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    cal.add(Calendar.MILLISECOND, 10);

    DateFormat df = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    f.setTimeZone(cal.getTimeZone());
    System.out.println(f.format(cal.getTime()));

getTime は、timeZone に関する情報を持たない Date オブジェクトを提供します。By Date オブジェクトは、日付を GMT(toGMTString()) およびローカル タイム ゾーン(toLocalString()) で表示できます。

このコードは、UTC の時刻を必要な形式で提供します。

于 2012-11-27T19:04:46.447 に答える