
因为 LocalDate 被设计为不可变对象,这样的话每个修改当前 LocalDate 对象的方法(比如 plusDays),都会返回一个新的 LocalDate 对象,而原有的 LocalDate 对象不会发生改变。
按照你的要求,如何得到一个月有多少天,这里并没有说是什么年份,所以默认当年(不同年份的月份天数可能不一样,例如闰年的二月)
因此问题变为
输入条件:指定某一个月
输出结果:当年这个月份的天数
思路:在Java8里新的时间API里,月份已经被抽象成了枚举Month,所以可以把输入条件定义为枚举类型的Month,然后获取当前时间X,把时间X的月份修改为输入条件的月份,此时时间X变为X1,根据本身提供的方法lengthOfMonth就可以直接得到X1所在当月的天数了
代码:(请将JDK升到8)
public static void main(String[] args) {Systemoutprintln(countDaysInMonth(MonthMAY));
}
public static int countDaysInMonth(Month month){
// 获取当前时间
LocalDate now = LocalDatenow();
Systemoutprintln(now);
// 把当前时间的月份修改为输入的月份
LocalDate thisMonthDate = nowwithMonth(monthgetValue());
Systemoutprintln(thisMonthDate);
return thisMonthDatelengthOfMonth();
}
也可以连着写,更美观点
public static int countDaysInMonth(Month month){return LocalDatenow()
withMonth(monthgetValue())
lengthOfMonth();
}
非常直观且易懂好用,在Java8里with就代表着修改意思,withMonth那就是修改月份,所以整个代码读下来就变成
获取当前时间A
修改A的月份为输入条件得到时间B
计算B所在月的天数
1、使用Calendar类。
Calendar cal = CalendargetInstance();
calset(CalendarYEAR, 2016); // 2016年
calset(CalendarWEEK_OF_YEAR, 10); // 设置为2016年的第10周
calset(CalendarDAY_OF_WEEK, 2); // 1表示周日,2表示周一,7表示周六
Date date = calgetTime();
以上就能得到2016年第10周的周一的Date时间。
注:上面代码是手工敲的,没有放到eclipse中运行,有写错的地方请谅解
- (int)intervalSinceNow: (NSString ) theDate
{
NSDateFormatter date=[[NSDateFormatter alloc] init];
[date setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate d=[date dateFromString:theDate];
NSTimeInterval late=[d timeIntervalSince1970]1;
NSDate dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval now=[dat timeIntervalSince1970]1;
NSString timeString=@"";
NSTimeInterval cha=now-late;
if (cha/86400>1)
{
timeString = [NSString stringWithFormat:@"%f", cha/86400];
timeString = [timeString substringToIndex:timeStringlength-7];
return [timeString intValue];
}
return -1;
}
上面的例子只是计算相差了几天
当然可以计算其他数值
cha/3600<1 分钟
if (cha/3600>1&&cha/86400<1) 小时
01
// 获取当前日期
02
NSDate date = [NSDate date];
03
04
// 打印结果: 当前时间 date = 2013-08-16 09:00:04 +0000
05
NSLog(@"当前时间 date = %@",date);
06
07
// 获取从某个日期开始往前或者往后多久的日期,此处60代表60秒,如果需要获取之前的,将60改为-60即可
08
date = [[NSDate alloc] initWithTimeInterval:60 sinceDate:[NSDate date]];
09
10
//打印结果:当前时间 往后60s的时间date = 2013-08-16 09:01:04 +0000
11
NSLog(@"当前时间 往后60s的时间date = %@",date);
PS:测试时时间是下午5点,但是得到的当前时间却是上午9点,相差了8小时,是时区的问题
解决办法:
1
NSTimeZone zone = [NSTimeZone systemTimeZone];
2
3
NSInteger interval = [zone secondsFromGMTForDate: date];
4
5
NSDate localDate = [date dateByAddingTimeInterval: interval];
6
7
// 打印结果 正确当前时间 localDate = 2013-08-16 17:01:04 +0000
8
NSLog(@"正确当前时间 localDate = %@",localDate);
LocalDate
看看新的LocalDate怎么用:
// 取当前日期:
LocalDate today = LocalDatenow(); // -> 2014-12-24
// 根据年月日取日期,12月就是12:
LocalDate crischristmas = LocalDateof(2014, 12, 25); // -> 2014-12-25
// 根据字符串取:
LocalDate endOfFeb = LocalDateparse("2014-02-28"); // 严格按照ISO yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式
LocalDateparse("2014-02-29"); // 无效日期无法通过:DateTimeParseException: Invalid date
日期转换经常遇到,比如:
// 取本月第1天:
LocalDate firstDayOfThisMonth = todaywith(TemporalAdjustersfirstDayOfMonth()); // 2014-12-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = todaywithDayOfMonth(2); // 2014-12-02
// 取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfThisMonth = todaywith(TemporalAdjusterslastDayOfMonth()); // 2014-12-31
// 取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonthplusDays(1); // 变成了2015-01-01
// 取2015年1月第一个周一,这个计算用Calendar要死掉很多脑细胞:
LocalDate firstMondayOf2015 = LocalDateparse("2015-01-01")with(TemporalAdjustersfirstInMonth(DayOfWeekMONDAY));
// 2015-01-05
LocalTime
LocalTime只包含时间,以前用javautilDate怎么才能只表示时间呢?答案是,假装忽略日期。
LocalTime包含毫秒:
LocalTime now = LocalTimenow(); // 11:09:09240
你可能想清除毫秒数:
LocalTime now = LocalTimenow()withNano(0)); // 11:09:09
构造时间也很简单:
LocalTime zero = LocalTimeof(0, 0, 0); // 00:00:00
LocalTime mid = LocalTimeparse("12:00:00"); // 12:00:00
以上就是关于java的LocalDate对象问题全部的内容,包括:java的LocalDate对象问题、Java里,如何得到一个月有多少天、java 怎么根据第几年的第几周获取那周周一的时期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)