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?
基本上你只想这样做:
Calendar cal = Calendar.getInstance();
cal.setTime(expiry);
cal.set(Calendar.YEAR, 2012);
Date expiryThisYear = cal.getTime();
提出了一些有趣的问题,关于你最初是如何将 517706 作为输入的,但世界有时是一个奇怪的地方 :)
以下代码将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
你的问题不是很清楚(听起来像一些奇怪的硬件问题)。无论如何,您只需添加自您提供的日期以来经过的时间(以毫秒为单位)。
msOriginal是您在 ms 中提供的日期。msElapsed是自 1970 年以来经过的总毫秒数。这等于2012 - 1970 = 42年。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