2014-10-06 68 views
0
Calendar now = null; 
    now.getInstance(); 
    System.out.println(now.getInstance()); 
    System.out.println(now.ERA); 
    System.out.println(now.YEAR); 
    System.out.println(now.MONTH); 
    System.out.println(now.WEEK_OF_YEAR); 
    System.out.println(now.WEEK_OF_MONTH); 
    System.out.println(now.DAY_OF_MONTH); 
    System.out.println(now.DAY_OF_YEAR); 
    System.out.println(now.DAY_OF_WEEK); 
    System.out.println(now.DAY_OF_WEEK_IN_MONTH); 

计划输出(重要的信息是在帽和新行):日历返回错误的年份和月份的Java

java.util.GregorianCalendar[time=1412554865330,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=278,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=21,SECOND=5,MILLISECOND=330,ZONE_OFFSET=-28800000,DST_OFFSET=3600000] 

0 
1 
2 
3 
4 
5 
6 
7 
8 

(0-8上新的生产线) 我真的损失在这里,我不确定为什么java决定在我身上播放这个糟糕的恶作剧。

+1

这是什么问题,是什么呢?你看到什么,你不指望?也许MONTH的价值? [*格里历和朱利安历年的第一个月是1月,这是0;最后一次取决于一年中的月数。)*](http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#MONTH) – 2014-10-06 00:27:25

+1

哦,我明白了你的问题是。尝试'System.out.println(now.get(Calendar.YEAR));'。此外,'现在的日历= Calendar.getInstance();'。 – 2014-10-06 00:29:58

回答

3

这些都是Calendar类的static字段。 Java allows static fields (and methods) to be accessed on expressions that resolve to an instance's reference value以同样的方式它的类型名称

now.ERA 
// is equivalent to 
Calendar.ERA 

Calendar类提供了获取日期字段的值get(int)方法。

now.get(Calendar.MONTH); 
+0

我试过多种写这个的方法,包括Calendar.getInstance()。MONTH()。但是,您建议的方式会导致NullPointerException。日历现在=空; now.get(的Calendar.MONTH);因为现在是空的,但必须初始化才能使用它的方法。 – 2014-10-06 00:40:53

+1

@DavidFisher我已经链接了javadoc。不要只是猜测。看看可用的方法并使用它们。我已经提供了一个从'Calendar'实例获取Month字段的例子。 – 2014-10-06 00:43:27

+0

@DavidFisher在你调用一个方法之前初始化你的引用。 – 2014-10-06 00:43:52

0

乔达时间

仅供参考,您可能会发现与Joda-Time库(或Java中8 java.time package)工作比使用java.util.Date & Java的更愉快的体验。 util.Calendar类。

Joda-Time和java.time都遵循ISO 8601来定义每周一年和默认字符串格式。

这里是相同类型的代码,但使用Joda-Time 2.4。

DateTimeZone timeZone = DateTimeZone.forID("America/Montreal"); 
java.util.Locale locale = Locale.CANADA_FRENCH; 
DateTimeFormatter formatter = DateTimeFormat.forStyle("FF").withLocale(locale); 
DateTime dateTime = DateTime.now(timeZone); 

转储到控制台。

System.out.println("Full: " + formatter.print(dateTime)); 
System.out.println("Era: " + dateTime.getEra()); // 0 (BC/BCE) & 1 (AD/CE). 
System.out.println("Year: " + dateTime.getYear()); 
System.out.println("Month: " + dateTime.getMonthOfYear()); 
System.out.println("WeekOfYear: " + dateTime.getWeekOfWeekyear()); // Standard ISO 8601 week. 
//System.out.println(now.WEEK_OF_MONTH); // Not in Joda-Time as there is no standard definition for week-of-month. 
System.out.println("DayOfMonth: " + dateTime.getDayOfMonth()); 
System.out.println("DayOfYear: " + dateTime.getDayOfYear()); 
System.out.println("DayOfWeek: " + dateTime.getDayOfWeek()); // Starts at 1 rather than 0. Amazing! 
//System.out.println(now.DAY_OF_WEEK_IN_MONTH); // Not in Joda-Time as there is no standard definition for week-of-month. 
System.out.println("TimeZone: " + dateTime.getZone()); 

运行时。

Full: dimanche 5 octobre 2014 21 h 22 EDT 
Era: 1 
Year: 2014 
Month: 10 
WeekOfYear: 40 
DayOfMonth: 5 
DayOfYear: 278 
DayOfWeek: 7 
TimeZone: America/Montreal 
-1

我建议Java8的LocalDateTime和localtime类,如果你能口进入Java8

否则我建议你使用GregorianCalendar cal = new GregorianCalendar()

cal.get(Calendar.MONTH) for example 
相关问题