Java使用Asia/Kolkata时区的时段问候程序输出错误如何解决
问题排查结果
问题出在条件判断的边界值遗漏:12:49 PM对应getHour()返回的24小时制数值为12,你的所有分支判断都没有覆盖12这个值,最终匹配到else分支输出了Good night:
- 上午分支
h_today > 0 && h_today < 12:仅覆盖1到11点,不包含12点 - 下午分支
h_today > 12 && h_today < 17:仅覆盖13到16点,不包含12点 - 晚间分支
h_today >17 && h_today < 23:仅覆盖18到22点,不包含17、23点
除此之外0点也没有被第一个分支覆盖,会错误匹配到else分支。
修正后代码
LocalDateTime today = LocalDateTime.now(ZoneId.of("Asia/Kolkata")); int h_today = today.getHour(); if(h_today >= 0 && h_today < 12) { System.out.println("Good morning ma'am! \n"); } else if(h_today >= 12 && h_today < 17) { System.out.println("Good afternoon ma'am! \n"); } else if(h_today >=17 && h_today < 23 ) { System.out.println("Good evening ma'am! \n"); } else { System.out.println("Good night ma'am! \n"); }
补充说明
你选择使用LocalDateTime完全不会影响当前的小时判断逻辑,LocalDateTime.getHour()和LocalTime.getHour()返回的24小时制小时数值完全一致,不需要调整这个选型。
内容的提问来源于stack exchange,提问作者AYUSH Singh
相关产品推荐
相关产品推荐

