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?
答案 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)
你的问题不是很清楚(听起来像一些奇怪的硬件问题)。无论如何,你只需要添加自你提供的日期以来经过的时间(以毫秒为单位)。
msOriginal
是您在ms中提供的日期。msElapsed
是自1970年以来经过的总时间。这相当于2012 - 1970 = 42
年。msElapsedLeapYears
是过去的总工作日。如果你查看维基文章List of leap years,你可以看到有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