Kla*_*sos 150 java datetime calendar
如何知道特定年份的特定月份有多少天?
String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this
Run Code Online (Sandbox Code Playgroud)
Hem*_*lia 341
@Warren M. Nocos.如果您尝试使用Java 8的新Date和Time API,则可以使用java.time.YearMonth
class.请参阅Oracle教程.
// Get the number of days in that month
YearMonth yearMonthObject = YearMonth.of(1999, 2);
int daysInMonth = yearMonthObject.lengthOfMonth(); //28
Run Code Online (Sandbox Code Playgroud)
测试:在闰年中尝试一个月:
yearMonthObject = YearMonth.of(2000, 2);
daysInMonth = yearMonthObject.lengthOfMonth(); //29
Run Code Online (Sandbox Code Playgroud)
创建日历,设置年份和月份并使用 getActualMaximum
int iYear = 1999;
int iMonth = Calendar.FEBRUARY; // 1 (months begin with 0)
int iDay = 1;
// Create a calendar object and set year and month
Calendar mycal = new GregorianCalendar(iYear, iMonth, iDay);
// Get the number of days in that month
int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28
Run Code Online (Sandbox Code Playgroud)
测试:在闰年中尝试一个月:
mycal = new GregorianCalendar(2000, Calendar.FEBRUARY, 1);
daysInMonth= mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 29
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 40
如果你必须使用java.util.Calendar
,我怀疑你想要:
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
Run Code Online (Sandbox Code Playgroud)
但就个人而言,我建议使用Joda Time而不是java.util.{Calendar, Date}
开头,在这种情况下你可以使用:
int days = chronology.dayOfMonth().getMaximumValue(date);
Run Code Online (Sandbox Code Playgroud)
请注意,不是单独解析字符串值,而是最好使用您用来解析它的日期/时间API.在java.util.*
你可能会使用SimpleDateFormat
; 在Joda Time你会用到DateTimeFormatter
.
Ale*_*s G 23
你可以使用Calendar.getActualMaximum
方法:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int numDays = calendar.getActualMaximum(Calendar.DATE);
Run Code Online (Sandbox Code Playgroud)
Ale*_*uil 20
java.time.LocalDate
从Java 1.8,你可以使用的方法lengthOfMonth
上java.time.LocalDate
:
LocalDate date = LocalDate.of(2010, 1, 19);
int days = date.lengthOfMonth();
Run Code Online (Sandbox Code Playgroud)
小智 7
if (month == 4 || month == 6 || month == 9 || month == 11)
daysInMonth = 30;
else
if (month == 2)
daysInMonth = (leapYear) ? 29 : 28;
else
daysInMonth = 31;
Run Code Online (Sandbox Code Playgroud)
这是数学方法:
对于年,月(1到12):
int daysInMonth = month == 2 ?
28 + (year % 4 == 0 ? 1:0) - (year % 100 == 0 ? (year % 400 == 0 ? 0 : 1) : 0) :
31 - (month-1) % 7 % 2;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
192610 次 |
最近记录: |