从GregorianCalendar获取一周的一天

我有一个约会,我需要知道星期几,所以我使用了一个GregorianCalendar对象,但我找回了一些不正确的date

GregorianCalendar calendar = new GregorianCalendar(year, month, day); int i = calendar.get(Calendar.DAY_OF_WEEK); 

我究竟做错了什么?

谢谢!

编辑解决scheme:

 mont--; GregorianCalendar calendar = new GregorianCalendar(year, month, day); int i = calendar.get(Calendar.DAY_OF_WEEK); if(i == 2){ dayOfTheWeek = "Mon"; } else if (i==3){ dayOfTheWeek = "Tue"; } else if (i==4){ dayOfTheWeek = "Wed"; } else if (i==5){ dayOfTheWeek = "Thu"; } else if (i==6){ dayOfTheWeek = "Fri"; } else if (i==7){ dayOfTheWeek = "Sat"; } else if (i==1){ dayOfTheWeek = "Sun"; } 

 TimeZone timezone = TimeZone.getDefault(); Calendar calendar = new GregorianCalendar(timezone); calendar.set(year, month, day, hour, minute, second); String monthName=calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());//Locale.US); String dayName=calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault());//Locale.US); 

乔达时间

我使用乔达时间库进行所有date/时间相关的操作。 乔达考虑到你的地区,并相应地得到结果:

 import org.joda.time.DateTime; DateTime date = new DateTime(year, month, day, 0, 0, 0); 

要么

 DateTime date = DateTime().now(); 

星期几(int):

 date.getDayOfWeek(); 

星期几(短string)使用toString()DateTimeFormat选项:

 date.toString("EE"); 

TL;博士

 myGregCal.toZonedDateTime().getDayOfWeek().getDisplayName( TextStyle.SHORT , Locale.US ) 

java.time

通过调用添加到旧类的新方法,将麻烦的旧的遗留java.util.GregorianCalendar对象转换为现代java.time对象。

 ZonedDateTime zdt = myGregCal.toZonedDateTime(); 

获取那个时间段的DayOfWeek枚举对象。

 DayOfWeek dow = zdt.getDayOfWeek(); 

将这些DayOfWeek对象传递给代码,而不是传递像1-7这样的整数或“MON”之类的string。 通过使用枚举对象,可以使代码更加自我logging,提供types安全性,并确保一系列有效值。

为了呈现给用户,请让DayOfWeek对象将星期几的名称翻译成在Locale定义的人类语言。

 String output = dow.getDisplayName( TextStyle.FULL_STANDALONE , Locale.CANADA_FRENCH ); 

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了旧的麻烦date时间类,如java.util.Date.Calendarjava.text.SimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。

大部分的java.timefunction在ThreeTen- Backport中被移植到Java 6&7中,并在ThreeTenABP中进一步适用于Android 。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter等等。