使用java.util.Calendar从时间戳检索年和月时给出错误数据

使用java.util.Calendar从时间戳检索年和月时给出错误数据,java,datetime,datetime-format,Java,Datetime,Datetime Format,为了从给定的时间戳中获取年份和月份,我使用了以下代码。但是给出了一个错误的答案 long timestamp = Long.parseLong("1459239223"); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(timestamp); System.out.println(cal.get(Calendar.YEAR)); 但是当使用它时,它会给出正确的连接答案。你知道为什么会这样吗

为了从给定的时间戳中获取年份和月份,我使用了以下代码。但是给出了一个错误的答案

    long timestamp = Long.parseLong("1459239223");
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(timestamp);
    System.out.println(cal.get(Calendar.YEAR)); 
但是当使用它时,它会给出正确的连接答案。你知道为什么会这样吗


注意:正在使用Java7OpenJDK,并询问了一个类似的问题

您提到的用于在线转换的站点是正确的。您已经为日历实例设置了以秒为单位的时间,即乘以1000将以毫秒为单位的时间转换为秒

long timestamp = Long.parseLong("1459239223000");
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
System.out.println(cal.get(Calendar.YEAR)); 

因此,为了回答您的问题:Unix时间定义为自UTC 1970年1月1日午夜以来经过的秒数。

您提到的在线转换站点是正确的。您已经为日历实例设置了以秒为单位的时间,即乘以1000将以毫秒为单位的时间转换为秒

long timestamp = Long.parseLong("1459239223000");
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
System.out.println(cal.get(Calendar.YEAR)); 

因此,为了回答您的问题:Unix时间定义为自UTC 1970年1月1日午夜以来经过的秒数。

您也可以这样做-

SimpleDateFormat sdf = new SimpleDateFormat("yyyy");    
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));    
System.out.println(calendar.getWeekYear());

你也可以这样做-

SimpleDateFormat sdf = new SimpleDateFormat("yyyy");    
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));    
System.out.println(calendar.getWeekYear());

感谢这项工作和接受的答案也感谢的信息感谢这项工作和接受的答案也感谢的信息