悠悠楠杉
Java编写日程提醒系统:字符串与日期运算的实战结合
11/22
例如,当用户输入包含“今天”时,程序应将其解析为当前日期的0点,并根据是否有具体时间(如“今天晚上8点”)进行偏移。这里的关键是使用String.contains()方法初步判断关键词,再通过正则提取具体时刻。比如,使用正则表达式"(\\d{1,2})[点|:]?(\\d{0,2})?\\s*(上午|下午)?"来匹配“3点半”或“15:00”这类时间格式。一旦提取出小时和分钟,便可结合LocalDateTime.now().toLocalDate()生成完整的时间点。
对于相对时间,如“1小时后”、“3天后”,我们则需借助Duration和Period类进行计算。例如,若字符串中匹配到“(\d+)小时后”,我们可提取数字并调用localDateTime.plusHours(n)得到目标时间。而对于“下周一”这样的星期描述,则可通过TemporalAdjusters.next(DayOfWeek.MONDAY)实现精准跳转。
在整个流程中,字符串的预处理尤为重要。我们应对输入进行trim()、转小写等标准化操作,提升匹配鲁棒性。同时,建议采用分层解析策略:先处理绝对时间(如“2025-04-05”),再处理相对时间,最后兜底处理模糊表达。每一步都应有清晰的日志输出,便于调试。
通过这个项目,开发者不仅能巩固对java.time体系的理解,更能体会到如何将用户友好的输入转化为精确的程序逻辑,这是构建实用工具的关键一步。
