1
String mytime = "5177706";

long epoch = Long.parseLong( mytime );

Date expiry = new Date( epoch * 1000 );

当我将纪元时间转换为日期时,结果是

1970 年 3 月 2 日星期一 05:45:06 SGT

纪元时间的原因,年份是1970年,虽然答案的日期和月份是期望的结果。

如何将年份转换为当前年份作为输出,例如。2012 年 3 月 2 日星期一 05:45:06 SGT?

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

以下代码将epoch5177706 秒添加到当年的 1 月 1 日,即 2012 年 1 月 1 日 00:00:00:000 GMT。

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 2012. Mar 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 年是闰年,所以减去一天:

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

于 2012-05-25T06:52:16.693 回答
0

你的问题不是很清楚(听起来像一些奇怪的硬件问题)。无论如何,您只需添加自您提供的日期以来经过的时间(以毫秒为单位)。

  1. msOriginal是您在 ms 中提供的日期。
  2. msElapsed是自 1970 年以来经过的总毫秒数。这等于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 回答