java时间工具 判断时间大于一个月,小于一年,时间必须以月为单位分割(欢迎测试)

简介: 1 package test; 2 3 import java.io.UnsupportedEncodingException; 4 import java.text.ParseException; 5 import java.
  1 package test;
  2 
  3 import java.io.UnsupportedEncodingException;
  4 import java.text.ParseException;
  5 import java.text.SimpleDateFormat;
  6 import java.util.Base64;
  7 import java.util.Calendar;
  8 import java.util.Date;
  9 
 10 public class Test {
 11     public static void main(String[] args) throws UnsupportedEncodingException, ParseException {
 12         /*
 13          * Base64.Encoder encoder = Base64.getEncoder(); Base64.Decoder decoder
 14          * = Base64.getDecoder(); String str="mx..05220416";
 15          * System.out.println(new
 16          * String(decoder.decode("Z2hteDA1MjIwNDE2"),"UTF-8"));
 17          */
 18         /*
 19          * String time ="2018-01-02"; String time2 ="2019-01-02";
 20          * SimpleDateFormat sDateFormat=new SimpleDateFormat("yyyy-MM-dd");
 21          * //加上时间 Date begin=sDateFormat.parse(time); Date
 22          * end=sDateFormat.parse(time2); //System.out.println(begin);
 23          * System.out.println(begin.getTime());
 24          * System.out.println(end.getTime()); long oneyear=31536000;
 25          * System.out.println(end.getTime()/1000-begin.getTime()/1000==oneyear);
 26          * System.out.println();
 27          */    
 28         
 29         String begin="2017-02-27";
 30         String end="2017-03-28";
 31         System.out.println(test(begin,end));
 32     }
 33 
 34     public static boolean test(String beg,String ed) throws ParseException{
 35         boolean result=false;
 36         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 37         Date date = format.parse(beg);
 38         Date date2 = format.parse(ed);
 39         // 开始时间
 40         Calendar start = Calendar.getInstance();
 41         start.setTime(date);
 42         // 结束时间
 43         Calendar end = Calendar.getInstance();
 44         end.setTime(date2);
 45         if(testMonth(start,end)&&testYear(date,date2)&&testDay(start,end)){
 46              result=true;
 47         }
 48         return result;
 49     }
 50     
 51     
 52 
 53 public static boolean testDay(Calendar start,Calendar end){//时间必须要以月为单位分割
 54         boolean result=false;
 55         if(start.getActualMaximum(Calendar.DAY_OF_MONTH)==start.get(Calendar.DATE)){//说明这是开始时间是月份的最后一天
 56             result=end.getActualMaximum(Calendar.DAY_OF_MONTH)==end.get(Calendar.DATE);//那么结束时间也需要是月份的最后一天
 57             if(start.get(Calendar.DATE)==end.get(Calendar.DATE)){
 58                 result=true;
 59             }
 60         }
 61         if(start.getActualMaximum(Calendar.DAY_OF_MONTH)>start.get(Calendar.DATE)){//说明这是开始时间不是月份的最后一天
 62             if(start.get(Calendar.DATE)==end.get(Calendar.DATE)){//结束时间和开始时间是不同月份的同一天
 63                 result=true;
 64             }else if(start.get(Calendar.DATE)>end.get(Calendar.DATE)&&end.getActualMaximum(Calendar.DAY_OF_MONTH)==end.get(Calendar.DATE)){
 65                 result=true;
 66             }
 67             else if(start.get(Calendar.DATE)<end.get(Calendar.DATE)&&start.getActualMaximum(Calendar.DAY_OF_MONTH)==start.get(Calendar.DATE)){
 68                 result=true;
 69             }
 70         }
 71         return result;
 72         }
 73     
 74     
 75     public static boolean testYear(Date date,Date date2){
 76         boolean result=false;
 77         if(date2.getTime()/1000-date.getTime()/1000<31536000){//相差的时间不能大于一年
 78             result=true;
 79         }
 80         System.out.println(date2.getTime()/1000-date.getTime()/1000);
 81         return result;
 82     }
 83     
 84     public static boolean testMonth(Calendar start,Calendar end){
 85         boolean result=false;
 86         int subMonthCount = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR) == 0)//相差的月份
 87                 ? end.get(Calendar.MONTH) - start.get(Calendar.MONTH) // 同一年
 88                 : ((end.get(Calendar.YEAR) - start.get(Calendar.YEAR) >= 2) // 年数差超过2年
 89                         ? (end.get(Calendar.YEAR) - start.get(Calendar.YEAR) - 1) * 12
 90                                 + start.getActualMaximum(Calendar.MONTH) - start.get(Calendar.MONTH)
 91                                 + end.get(Calendar.MONTH) + 1
 92                         : start.getActualMaximum(Calendar.MONTH) - start.get(Calendar.MONTH)
 93                                 + end.get(Calendar.MONTH) + 1); // 年数差为1,Calendar.get(MONTH)
 94                                                                 // 第一月是0,所以+1
 95         //System.out.println(subMonthCount);
 96         if(subMonthCount<1){//相差月份必须大于一个月
 97             result=false;
 98         }else{
 99             result=true;
100         }
101         return result;
102     }
103     
104     
105 }


//欢迎测试
欢迎大家一起说出自己的想法。
目录
相关文章
|
2天前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
55 1
|
14天前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
56 6
|
2月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
496 10
|
2月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
262 0
|
3月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
134 0
|
3月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
3月前
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。
|
3月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
4月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
4月前
|
Java 数据安全/隐私保护
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本项目提供了一套基于Java的图片处理教学方案,包含自定义图片生成、图像水印添加及合法电子凭证生成技术示例。