如何检查时间是否处于指定范围?及特定格式时间戳解析疑问
关于时间戳解析后的"T"、去除方法及时间范围筛选
嘿,我来帮你理清楚这几个问题!
1. 中间的"T"是什么意思?
那个T是ISO 8601日期时间标准里的分隔符,专门用来明确区分日期部分(比如2018-03-01)和时间部分(比如05:06:30.663)。当你用DateTimeFormatter解析字符串得到LocalDateTime对象后,调用它的toString()方法时,就会默认输出这种符合国际标准的格式,所以会出现这个T。
2. 怎么去掉"T"?
要得到不带T的友好格式,你需要再用一个DateTimeFormatter把LocalDateTime对象重新格式化一遍。举个完整的代码例子:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class TimestampDemo { public static void main(String[] args) { // 原始时间戳字符串 String rawTimestamp = "20180301050630663"; // 定义解析用的格式器 DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); // 解析成LocalDateTime对象 LocalDateTime dateTime = LocalDateTime.parse(rawTimestamp, parser); // 定义不带T的输出格式器 DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); // 格式化输出 String formattedTimestamp = dateTime.format(outputFormatter); System.out.println(formattedTimestamp); // 输出:2018-03-01 05:06:30.663 } }
你可以根据自己的需求调整ofPattern里的格式字符串,比如如果只需要时间部分,就用"HH:mm:ss.SSS"即可。
3. 如何筛选处于[09:15:00.000am ...]范围内的时间戳?
这里假设你要筛选每天上午9点15分及之后的时间(如果是时间段,比如到下午某个时间,方法类似)。核心思路是提取LocalDateTime里的时间部分,和目标时间做比较:
方法1:提取LocalTime进行比较
import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; public class TimestampFilter { public static void main(String[] args) { // 示例批量时间戳 List<String> rawTimestamps = List.of( "20180301091459999", "20180301091500000", "20180301103020500", "20180302083000000" ); DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); LocalTime startTime = LocalTime.of(9, 15, 0, 0); // 09:15:00.000 List<LocalDateTime> filteredTimes = new ArrayList<>(); for (String ts : rawTimestamps) { LocalDateTime dateTime = LocalDateTime.parse(ts, parser); // 判断时间是否在目标范围(包含起始点) if (dateTime.toLocalTime().compareTo(startTime) >= 0) { filteredTimes.add(dateTime); } } // 输出筛选结果(可以再格式化) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); filteredTimes.forEach(dt -> System.out.println(dt.format(formatter))); } }
方法2:Java 11+可用的isBetween(如果是时间段)
如果你的需求是筛选在09:15:00.000到某个结束时间(比如17:30:00.000)之间的时间,可以用LocalTime的isBetween方法:
LocalTime startTime = LocalTime.of(9, 15); LocalTime endTime = LocalTime.of(17, 30); boolean isInRange = dateTime.toLocalTime().isBetween(startTime, endTime); // 注意:isBetween是左闭右闭区间,即包含startTime和endTime
内容的提问来源于stack exchange,提问作者mynameisJEFF
相关产品推荐
相关产品推荐

