1
String mytime = "5177706";

long epoch = Long.parseLong( mytime );

Date expiry = new Date( epoch * 1000 );

エポック時間を日付に変換すると、結果は

1970 年 3 月 2 日月曜日 05:45:06 SGT

エポックタイムの原因、年は1970年ですが、回答の月日が望ましい結果です。

年を出力として現在の年に変換するにはどうすればよいですか。月 3 月 02 日 05:45:06 SGT 2012 ?

4

3 に答える 3

1

基本的にあなたはこれをしたいだけです:

Calendar cal = Calendar.getInstance();
cal.setTime(expiry);
cal.set(Calendar.YEAR, 2012);
Date expiryThisYear = cal.getTime();

そもそも517706を入力として使用するようになった経緯について、いくつか興味深い質問がありますが、世界は時々奇妙な場所です:)

于 2012-05-25T06:08:05.737 に答える
0

次のコードはepoch、現在の年の1月1日(2012年1月1日00:00:00:00 0 GMT)に5177706秒を追加します。

public static void main(String[] args) {
    String mytime = "5177706";
    long epoch = Long.parseLong(mytime);

    // Get January 1st of the current year in GMT.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
    calendar.set(Calendar.MONTH, Calendar.JANUARY);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    // Convert epoch to milliseconds and add to January 1st of the current year.
    Date expiry = new Date(calendar.getTime().getTime() + epoch * 1000);

    // Output the expiry date in Asia/Singapore (SGT) time.
    DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
    format.setTimeZone(TimeZone.getTimeZone("Asia/Singapore"));
    System.out.println(format.format(expiry));
}

上記のコードはを出力しますThu Mar 01 06:15:06 SGT 2012Mar 02 05:45:06 SGT月、日、および時刻は、次の理由で予想と異なります。

  • シンガポール標準時(SGT)は、1981年12月31日にUTC + 07:30からUTC + 08:00に変更されたため、時刻に30分を追加します。

    Mar 02 05:45:06 SGT+30分= Mar 02 06:15:06 SGT

  • 2012年はうるう年なので、1日減算します。

    Mar 02 06:15:06 SGT-1日=Mar 01 06:15:06 SGT

于 2012-05-25T06:52:16.693 に答える
0

あなたの質問はあまり明確ではありません (奇妙なハードウェアの問題のように聞こえます)。とにかく、指定した日付からの経過時間をミリ秒単位で追加するだけです。

  1. msOriginalミリ秒で指定した日付です。
  2. msElapsed1970 年以降に経過したミリ秒の合計です。これは年に相当し2012 - 1970 = 42ます。
  3. msElapsedLeapYears閏年経過日数の合計です。wikiのうるう年の一覧を見ると、11年あったことがわかります。したがって、11 日間を考慮する必要があります。

上記の 3 つのフィールドの合計により、探している結果が得られます。日付が同じ日に当たらないことに注意してください (3 月 1 日は 2012 年の日曜日ではありません)。同じ日付にしたい場合は、2015 年 (45 年) である必要があります。基本的に、日付が同じ日に当たるには、mod 7 の経過日数が 0 である必要があります。

このサンプル コードは groovy で作成されているため、構文は通常の Java とは少し異なります。

long epoch = 5177706l;
Calendar current = Calendar.getInstance();
current.setTimeInMillis(epoch*1000);
println current.getTime();
long msOriginal = (epoch*1000);
long msElapsed = 42l*365*24l*3600*1000;
long msElapsedLeapYears = 11l*24*3600*1000;
current.setTimeInMillis(msOriginal+msElapsed+msElapsedLeapYears);
println current.getTime();

結果:

Sun Mar 01 16:15:06 CST 1970
Thu Mar 01 16:15:06 CST 2012
于 2012-05-25T06:56:07.710 に答える