截止日期与当前年份

时间:2012-05-25 05:44:40

标签: java datetime epoch

String mytime = "5177706";

long epoch = Long.parseLong( mytime );

Date expiry = new Date( epoch * 1000 );

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

  

Mon Mar 02 05:45:06 SGT 1970

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

如何将年份转换为当前年份作为输出,例如。 Mon Mar 02 05:45:06 SGT 2012?

3 个答案:

答案 0 :(得分:1)

基本上你只想这样做:

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

提出了一些有趣的问题,关于你是如何首先将517706作为输入的,但有时世界是一个奇怪的地方:)

答案 1 :(得分:0)

以下代码将epoch,5177706秒添加到当年的1月1日,即2012年1月1日格林威治标准时间00:00:00:000。

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不同:

  • Singapore Standard Time (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

答案 2 :(得分:0)

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

  1. msOriginal是您在ms中提供的日期。
  2. msElapsed是自1970年以来经过的总时间。这相当于2012 - 1970 = 42年。
  3. msElapsedLeapYears是过去的总工作日。如果你查看维基文章List of leap years,你可以看到有11年。所以你必须占11天。
  4. 上述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