tl;博士

正如George Fox所说的那样,你问题的直接答案是使用逻辑OR而不是AND .

但是您的代码还有其他问题:

忽略 time zone 的关键问题

使用血腥 awful date-time classes ,现在已经过时了 .

代码段:

data

.getDate() // Using terrible old `java.time.Date` class.

.toInstant() // Convert from legacy class to modern class.

.atZone( // Adjust from UTC to your own local time zone.

ZoneId.of( "Africa/Tunis" ) // Use proper time zone name in `Continent/Region` format.

) // Returns a `ZonedDateTime` object, a moment as seen through the wall-clock time used by the people of a particular region (a time zone).

.getHour() // Returns an `int` for hour-of-day.

...(等于或大于22)或(小于6)=夜间值 .

java.time

显然你正在使用可怕的旧日期时间类,推断你对 getHours 的调用是java.util.Date::getHours .

几年前,业界领先的java.time类取代了这些遗留类 .

顺便说一句, Date::getHours 也被弃用了 .

时区

如果您正在使用 java.util.Date ,那么您忽略了时区的关键问题 . Date 表示UTC中的时刻,根据定义始终为UTC .

因此,除非您居住在冰岛,否则请求UTC中的当天时间与您当地的白天和黑夜时间不符 .

首先将您的 Date 转换为现代java.time.Instant . 为此,您可以使用添加到旧类的新方法 .

Instant instant = myJavaUtilDate.toInstant() ; // Convert from legacy class to modern class.

然后为您所在地区应用时区,以获得ZonedDateTime .

以 continent/region 的格式指定proper time zone name,例如 America/Montreal , Africa/Casablanca 或 Pacific/Auckland . 切勿使用2-4字母缩写,例如 EST 或 IST ,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!) .

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;

ZonedDateTime zdt = instant.atZone( z ) ;

比较您的问题中的时间 .

static final int MORNING_HOUR = 6 ;

static final int EVENING_HOUR = 22 ;

int hour = zdt.getHour() ;

boolean isNighttime =

( hour >= EVENING_HOUR ) // Include this hour.

||

( hour < MORNING_HOUR ) // Exclude this hour.

;

您可以将它们收集到 Map 中,其中键是字符串“nighttime”或“daytime”,值是 Set 的 Crime 对象 . Set 消除了重复 . 如果您想要对犯罪进行排序,请使用 SortedSet .

Map < String, SortedSet < Crime > > dayOrNight = new HashMap <>( 2 );

dayOrNight.put( "daytime" , new TreeSet <>() );

dayOrNight.put( "nighttime" , new TreeSet <>() );

搜集 .

if( isNighttime ) {

dayOrNight.get( "nighttime" ).add( crime ) ;

} else { // Else, must be daytime.

dayOrNight.get( "daytime" ).add( crime ) ;

}

让我们接下来将该代码转换为使用时间而不是一天中的时间,以防您的业务规则被重新定义为部分小时 .

通常使用半开放方法最好地定义时间 Span . 开头是包容性的,而结尾是独家的 . 因此,夜晚时间从晚上10点的第一个时刻开始,一直持续到但不包括上午6点的第一个时刻 .

提示:询问“是否等于或晚于晚上10点”的较短方式是“如果不是之前

LocalTime morning = LocalTime.of( 6 , 0 ) ;

LocalTime evening = LocalTime.of( 22 , 0 ) ;

LocalTime lt = zdt.toLocalTime() ;

boolean isNighttime = ( ! lt.isBefore( evening ) ) || lt.isBefore( morning ) ;

if( isNighttime ) {

dayOrNight.get( "nighttime" ).add( crime ) ;

} else { // Else, must be daytime.

dayOrNight.get( "daytime" ).add( crime ) ;

}

关于java.time

要了解更多信息,请参阅Oracle Tutorial . 并搜索Stack Overflow以获取许多示例和解释 . 规格是JSR 310 .

您可以直接与数据库交换java.time对象 . 使用JDBC driver符合JDBC 4.2或更高版本 . 不需要字符串,不需要 java.sql.* 类 .

从哪里获取java.time类?

Java 9增加了一些小功能和修复 .

大多数java.time功能都在ThreeTen-Backport中反向移植到Java 6和7 .

更新版本的Android捆绑java.time类的实现 .

ThreeTen-Extra项目使用其他类扩展了java.time . 该项目是未来可能添加到java.time的试验场 . 您可以在这里找到一些有用的类,例如Interval,YearWeek,YearQuarter和more .

java判断白天黑夜,获取Java中的所有夜晚时间相关推荐

  1. java解析pdf获取pdf中内容信息

    java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询. 废话不多说,我要直接上代码装逼了 第一种 使用 ...

  2. JAVA 通过value获取Map中key的三种方法

    JAVA 通过value获取Map中key的三种方法 简介 方法描述 循环法 Stream方法 Apache Commons Collections的BidiMap 总结 简介 我们都知道Map是存放 ...

  3. java判断栈空_java中栈的应用-判断分隔符是否合理

    栈是软件系统应用最广泛的数据结构之一,只要涉及先进后出的处理特征都可以使用栈结构. 例如:函数递归调用中的地址和参数值的保存,文本编辑器中序列的保存,在编译软件设计中的括号匹配及表达式求值,网页访问历 ...

  4. java 判断 中文字符_java中判断字符串中是否有中文字符

    package com.meritit.test; public class TestChart { public static void main(String[] args) throws Exc ...

  5. java get null_java 获取对象中为null的字段实例代码

    下面一段简单的代码给大家分享java 获取对象中为null的字段,具体代码如下所述: private static String[] getNullPropertyNames(Object sourc ...

  6. java使用正则表达式获取字符串中的所有英文单词或数字

    偶然发现网上贴出的使用正则表达式获取字符串中的所有英文单词或数字的方法,很实用,就摘下来了 import java.util.regex.Pattern;   import java.util.reg ...

  7. Java如何遍历获取对象中的所有属性和值

    当我们需要对对象的所有值进行遍历的时候,依次进行get.set方法非常的麻烦,这个时候我们就会用到对象属性和值的遍历,应用代码如下 // voucher是目标对象 try{//通过getDeclare ...

  8. kettle 使用java脚本连接获取数据库中的值

    思路:在kettle中通过设置自定义常数来获取java脚本的值,在kettle的libswt\win64目录下放入用到的含有java.sql中的类的jar包rt.jar,  在 java脚本中像正常j ...

  9. java 判断图片合适,Java 判断图片色彩

    package cardshibie; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOut ...

最新文章

  1. python爬虫流程-Python爬虫流程
  2. 【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
  3. soap响应报文拼装_SOAP学习,构建实际的报文格式
  4. Java黑皮书课后题第8章:*8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1。让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了
  5. linux格式化usb设备,如何在 usb linux下格式化磁盘
  6. hibernate dynamic-update=true属性不起作用原因(转载)
  7. html怎么添加背景图片_万能的产品介绍PPT页面是怎么炼成的?
  8. LeetCode每日一题——无重复字符的最长子串
  9. 基于51单片机制作的基础四轮蓝牙小车(含代码)
  10. html打开页面时在img标签加域名,Html中的img标签 加载失败
  11. 解密区块链最强心脏 迅雷链共识算法详解
  12. Apache部署超详细教程
  13. 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)
  14. SpringBoot项目中增加favicon.ico图标
  15. StringTokenizer类详解
  16. vue.js向后端传数据
  17. nacos + seata
  18. 【云云怪】明星人脸识别——模板在手,万物皆可学习
  19. 李永乐复习全书高等数学 第七章 无穷级数
  20. CPDA之一句话总结

热门文章

  1. C语言编写压缩解压字符串程序
  2. OV7725摄像头的彩色图像采集原理与液晶显示《一》
  3. 二、VLAN,单臂路由
  4. 电阻、电容和电感的选型及作用
  5. [经典面试题]排列组合专题
  6. 学习编程应该最基本的是学习什么
  7. 计算机重新装xp系统软件,关于安装软件重启XP电脑后软件不见的处理方法
  8. HDU - 3374(最小表示法+最大表示法)
  9. android开发者选项打开方式,打开、关闭安卓手机的开发者选项的方法详解
  10. 腾讯数据分析师内训课程!