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 }


//欢迎测试
欢迎大家一起说出自己的想法。
目录
相关文章
|
6天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
5天前
|
监控 网络协议 Java
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具
|
5天前
|
安全 网络协议 关系型数据库
最好用的17个渗透测试工具
渗透测试是安全人员为防止恶意黑客利用系统漏洞而进行的操作。本文介绍了17款业内常用的渗透测试工具,涵盖网络发现、无线评估、Web应用测试、SQL注入等多个领域,包括Nmap、Aircrack-ng、Burp Suite、OWASP ZAP等,既有免费开源工具,也有付费专业软件,适用于不同需求的安全专家。
10 2
|
1月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
381 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
15天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
32 2
|
16天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
17 1
|
23天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
22 5
|
28天前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
36 1
|
1月前
|
jenkins 测试技术 持续交付
提升软件测试效率的实用技巧与工具
【10月更文挑战第12天】 本文将深入探讨如何通过优化测试流程、引入自动化工具和持续集成等策略,来显著提高软件测试的效率。我们将分享一些实用的技巧和工具,帮助测试人员更高效地发现和定位问题,确保软件质量。
45 2
|
1月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
185 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)