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 }


//欢迎测试
欢迎大家一起说出自己的想法。
目录
相关文章
|
30天前
|
前端开发 测试技术 Python
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
本文分享了使用Selenium进行UI自动化测试的全过程,包括开发环境部署、代码实现、思路分析和难点解析。作者通过一个实际案例,讲述了如何利用Selenium处理前端生成报告失败的问题,以及在UI自动化中定位元素和处理元素不唯一的情况。同时,文章强调了解决问题思路的重要性,鼓励读者开拓思维,寻找不同的解决方案。
78 4
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
|
16天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
2天前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
11 4
|
7天前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
28 6
|
12天前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
12天前
|
Java 数据处理
技术分享:高效与灵活并存——Java版通用树形结构转换工具的实现与应用
在软件开发中,树形结构的数据表现形式无处不在,从文件系统的目录树到组织架构的部门树,再到各类产品的分类结构。处理这些具有层级关系的数据时,将其转换为树形结构以便展示和操作显得尤为重要。Java作为一门成熟的编程语言,虽然提供了强大的集合框架,但并未直接提供树形结构转换的内置工具。因此,开发一个高效且灵活的通用树形结构转换工具成为许多项目中的必备需求。
23 2
|
12天前
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
29 1
|
19天前
|
监控 安全 Linux
如何利用Kali Linux进行网站渗透测试:最常用工具详解
如何利用Kali Linux进行网站渗透测试:最常用工具详解
55 6
|
19天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
28 2
|
23天前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
31 4