84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
String date1 = “2017-04-06”;String start = "2017-04";String end = "2017-06";java 计算data1是否在start和end之间。start和end即表示的是四月到六月
小伙看你根骨奇佳,潜力无限,来学PHP伐。
如果你没用Java8:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) throws ParseException { String date1 = "2017-06-06"; String start = "2017-04"; String end = "2017-06"; Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(date1); Date dStart = new SimpleDateFormat("yyyy-MM").parse(start); Calendar c = Calendar.getInstance(); c.setTime(new SimpleDateFormat("yyyy-MM").parse(end)); c.add(Calendar.MONTH, 1); Date dEnd = c.getTime(); if (d1.after(dStart) && d1.before(dEnd)) { System.out.println("true"); } else { System.out.println("false"); } } }
我看前面已经有人说到Java8了...不过这个写法是有点尴尬...思路大家基本一样...
给的start时间要变为当前月的第一天
给的end时间要变为当前月的最后一天
关键是如何变的问题...Java8的时间是有现成的API可以调用的...不需要parse这种方式...变成第一天还好,变成最后一天有诸多的判断...
代码如下,按照所给条件,写了一个isBetween方法
public static boolean isBetween(String date, String start, String end){ // 把start转化为start所在月份的第一天 LocalDate startDate = LocalDate.now().with(YearMonth.parse(start)).with(TemporalAdjusters.firstDayOfMonth()); // 把end转化为end所在月份的最后一天 LocalDate endDate = LocalDate.now().with(YearMonth.parse(end)).with(TemporalAdjusters.lastDayOfMonth()); // 把date转化为LocalDate LocalDate currentDate = LocalDate.parse(date); return currentDate.isAfter(startDate) && currentDate.isBefore(endDate); }
简单解释一下...yyyy-mm这种年月的形式在Java8中已经有新的类来处理,这就是YearMonth(它是一个TemporalAdjuster的实现类),根据LocalDate(它是一个Temporal的实现类)的with方法,其实是Temporal接口的with方法,这里涉及到Java8的新时间API的设计,with方法签名如下
YearMonth
TemporalAdjuster
LocalDate
Temporal
含义即是:一个Temporal对象可以根据一个TemporalAdjuster对象进行调整
所以结合到上面写的代码,思路如下
随意取了当前时间LocalDate A
把A根据传入的YearMonth进行修改(调用with方法),即调整时间的年和月,得到时间B
把B再根据一个调整器TemporalAdjuster(TemporalAdjusters.firstDayOfMonth),调整时间的日,得到最后的时间
TemporalAdjusters.firstDayOfMonth
其实时间调整,在TemporalAdjusters中已经封装了不少常用的了...用起来也简单直白好用的,可以关注这个类
TemporalAdjusters
最后,提供一个我以前自己简单连的Java8新时间API的一些关系,跟着这些关系可以再看看具体类,捋捋关系,会发现新时间API不但好用还很强大
如果你用上了 Java8:
import java.time.LocalDate; public class What { public static void main(String[] args) throws Exception { String date1 = "2017-04-06"; String start = "2017-04"; String end = "2017-06"; LocalDate date = LocalDate.parse(date1); LocalDate startDate = LocalDate.parse(start + "-01"); LocalDate endDate = LocalDate.parse(end + "-01"); endDate = endDate.plusDays(endDate.getMonth().maxLength()); if (date.isAfter(startDate) && date.isBefore(endDate)) { System.out.println("data1 在 start 和 end 之间"); } else { System.out.println("data1 不在 start 和 end 之间"); } } }
如果你没用Java8但用了Joda-time:
public boolean between(String date){ String start = "2017-04"; String end = "2017-06"; try { return DateTime.parse(date).isAfter(DateTime.parse(start).withDayOfMonth(1).toInstant()) && DateTime.parse(date).isBefore(DateTime.parse(end).plusMonths(1).withDayOfMonth(1).minusDays(1).toInstant()); }catch (Exception e){ return false; } }
end要转换成这个月的最后一天,比如说2017-06-30;
2017-06-30
如果格式确定为yyyy-mm或yyyy-mm-dd,那么用date.compareTo(start) >= 0 && date.compareTo(end) < 0就可以了;
yyyy-mm
yyyy-mm-dd
date.compareTo(start) >= 0 && date.compareTo(end) < 0
如果有不规范的格式,比如2017-4-6,要么转换成规范的格式,要么都转换成Date或long(Date本质就是long),再进行比较。
2017-4-6
如果你没用Java8:
我看前面已经有人说到Java8了...不过这个写法是有点尴尬...思路大家基本一样...
给的start时间要变为当前月的第一天
给的end时间要变为当前月的最后一天
关键是如何变的问题...Java8的时间是有现成的API可以调用的...不需要parse这种方式...变成第一天还好,变成最后一天有诸多的判断...
代码如下,按照所给条件,写了一个isBetween方法
简单解释一下...
yyyy-mm这种年月的形式在Java8中已经有新的类来处理,这就是
YearMonth
(它是一个TemporalAdjuster
的实现类),根据LocalDate
(它是一个Temporal
的实现类)的with方法,其实是Temporal
接口的with方法,这里涉及到Java8的新时间API的设计,with方法签名如下含义即是:一个
Temporal
对象可以根据一个TemporalAdjuster
对象进行调整所以结合到上面写的代码,思路如下
随意取了当前时间
LocalDate
A把A根据传入的
YearMonth
进行修改(调用with方法),即调整时间的年和月,得到时间B把B再根据一个调整器
TemporalAdjuster
(TemporalAdjusters.firstDayOfMonth
),调整时间的日,得到最后的时间其实时间调整,在
TemporalAdjusters
中已经封装了不少常用的了...用起来也简单直白好用的,可以关注这个类最后,提供一个我以前自己简单连的Java8新时间API的一些关系,跟着这些关系可以再看看具体类,捋捋关系,会发现新时间API不但好用还很强大
如果你用上了 Java8:
如果你没用Java8但用了Joda-time:
end要转换成这个月的最后一天,比如说
2017-06-30
;如果格式确定为
yyyy-mm
或yyyy-mm-dd
,那么用date.compareTo(start) >= 0 && date.compareTo(end) < 0
就可以了;如果有不规范的格式,比如
2017-4-6
,要么转换成规范的格式,要么都转换成Date或long(Date本质就是long),再进行比较。