我有一个约会,我需要知道星期几,所以我使用了一个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");
myGregCal.toZonedDateTime().getDayOfWeek().getDisplayName( TextStyle.SHORT , Locale.US )
通过调用添加到旧类的新方法,将麻烦的旧的遗留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 8及更高版本中。 这些类取代了旧的麻烦date时间类,如java.util.Date
, .Calendar
和java.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一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等。