国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java比較時間

瀏覽:114日期:2024-01-04 18:41:37

問題描述

String date1 = “2017-04-06”;String start = '2017-04';String end = '2017-06';java 計算data1是否在start和end之間。start和end即表示的是四月到六月

問題解答

回答1:

如果你沒用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');} }}回答2:

我看前面已經有人說到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轉化為LocalDateLocalDate currentDate = LocalDate.parse(date);return currentDate.isAfter(startDate) && currentDate.isBefore(endDate); }

簡單解釋一下...yyyy-mm這種年月的形式在Java8中已經有新的類來處理,這就是YearMonth(它是一個TemporalAdjuster的實現類),根據LocalDate(它是一個Temporal的實現類)的with方法,其實是Temporal接口的with方法,這里涉及到Java8的新時間API的設計,with方法簽名如下

java比較時間

含義即是:一個Temporal對象可以根據一個TemporalAdjuster對象進行調整

所以結合到上面寫的代碼,思路如下

隨意取了當前時間LocalDate A

把A根據傳入的YearMonth進行修改(調用with方法),即調整時間的年和月,得到時間B

把B再根據一個調整器TemporalAdjuster(TemporalAdjusters.firstDayOfMonth),調整時間的日,得到最后的時間

其實時間調整,在TemporalAdjusters中已經封裝了不少常用的了...用起來也簡單直白好用的,可以關注這個類

最后,提供一個我以前自己簡單連的Java8新時間API的一些關系,跟著這些關系可以再看看具體類,捋捋關系,會發現新時間API不但好用還很強大

java比較時間

回答3:

如果你用上了 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 之間');} } }回答4:

如果你沒用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; }}回答5:

end要轉換成這個月的最后一天,比如說2017-06-30;

如果格式確定為yyyy-mm或yyyy-mm-dd,那么用date.compareTo(start) >= 0 && date.compareTo(end) < 0就可以了;

如果有不規范的格式,比如2017-4-6,要么轉換成規范的格式,要么都轉換成Date或long(Date本質就是long),再進行比較。

標簽: java
相關文章:
主站蜘蛛池模板: 一级片网站在线观看 | 午夜天堂视频 | 亚洲系列中文字幕一区二区 | a级国产乱理伦片在线观看99 | 亚洲精品专区一区二区三区 | 刺激免费视频 | 老司机午夜在线视频免费观 | 久99频这里只精品23热 视频 | 久久精品免看国产成 | 欧美日本一区二区三区道 | 一级做a爰片久久毛片美女 一级做a爰片久久毛片免费看 | 免费看香港一级毛片 | 久久er热这里只有精品免费 | 亚洲欧美精品一区二区 | 欧美视频久久久 | 男女视频在线免费观看 | 日韩一品在线播放视频一品免费 | 久久亚洲国产高清 | 色综久久| 免费人成在线观看网站品爱网 | 美女黄页网站 | 久久精品成人欧美大片免费 | 国产精品欧美视频另类专区 | 午夜在线播放免费人成无 | 亚洲欧美偷拍自拍 | 国产在线播放一区 | 国产一区二区亚洲精品 | 亚洲成人天堂 | 国产视频在线免费观看 | 中国人免费观看高清在线观看二区 | 国产伦码精品一区二区三区 | 黄性色| 一级片www| 欧美在线视频一区二区 | 在线免费观看亚洲视频 | 香港日本韩国三级网站 | 成人a级高清视频在线观看 成人a毛片 | a黄视频 | 99精品久久久久久久免费看蜜月 | 亚洲国产cao | 国产亚洲精品午夜高清影院 |