java的LocalDate对象问题

java的LocalDate对象问题,第1张

因为 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 怎么根据第几年的第几周获取那周周一的时期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9766234.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存