久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java比較時(shí)間

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

問(wèn)題描述

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

問(wèn)題解答

回答1:

如果你沒(méi)用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:

我看前面已經(jīng)有人說(shuō)到Java8了...不過(guò)這個(gè)寫(xiě)法是有點(diǎn)尷尬...思路大家基本一樣...

給的start時(shí)間要變?yōu)楫?dāng)前月的第一天

給的end時(shí)間要變?yōu)楫?dāng)前月的最后一天

關(guān)鍵是如何變的問(wèn)題...Java8的時(shí)間是有現(xiàn)成的API可以調(diào)用的...不需要parse這種方式...變成第一天還好,變成最后一天有諸多的判斷...

代碼如下,按照所給條件,寫(xiě)了一個(gè)isBetween方法

public static boolean isBetween(String date, String start, String end){// 把start轉(zhuǎn)化為start所在月份的第一天LocalDate startDate = LocalDate.now().with(YearMonth.parse(start)).with(TemporalAdjusters.firstDayOfMonth());// 把end轉(zhuǎn)化為end所在月份的最后一天LocalDate endDate = LocalDate.now().with(YearMonth.parse(end)).with(TemporalAdjusters.lastDayOfMonth());// 把date轉(zhuǎn)化為L(zhǎng)ocalDateLocalDate currentDate = LocalDate.parse(date);return currentDate.isAfter(startDate) && currentDate.isBefore(endDate); }

簡(jiǎn)單解釋一下...yyyy-mm這種年月的形式在Java8中已經(jīng)有新的類(lèi)來(lái)處理,這就是YearMonth(它是一個(gè)TemporalAdjuster的實(shí)現(xiàn)類(lèi)),根據(jù)LocalDate(它是一個(gè)Temporal的實(shí)現(xiàn)類(lèi))的with方法,其實(shí)是Temporal接口的with方法,這里涉及到Java8的新時(shí)間API的設(shè)計(jì),with方法簽名如下

java比較時(shí)間

含義即是:一個(gè)Temporal對(duì)象可以根據(jù)一個(gè)TemporalAdjuster對(duì)象進(jìn)行調(diào)整

所以結(jié)合到上面寫(xiě)的代碼,思路如下

隨意取了當(dāng)前時(shí)間LocalDate A

把A根據(jù)傳入的YearMonth進(jìn)行修改(調(diào)用with方法),即調(diào)整時(shí)間的年和月,得到時(shí)間B

把B再根據(jù)一個(gè)調(diào)整器TemporalAdjuster(TemporalAdjusters.firstDayOfMonth),調(diào)整時(shí)間的日,得到最后的時(shí)間

其實(shí)時(shí)間調(diào)整,在TemporalAdjusters中已經(jīng)封裝了不少常用的了...用起來(lái)也簡(jiǎn)單直白好用的,可以關(guān)注這個(gè)類(lèi)

最后,提供一個(gè)我以前自己簡(jiǎn)單連的Java8新時(shí)間API的一些關(guān)系,跟著這些關(guān)系可以再看看具體類(lèi),捋捋關(guān)系,會(huì)發(fā)現(xiàn)新時(shí)間API不但好用還很強(qiáng)大

java比較時(shí)間

回答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:

如果你沒(méi)用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要轉(zhuǎn)換成這個(gè)月的最后一天,比如說(shuō)2017-06-30;

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

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

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 清流县| 岚皋县| 手游| 图木舒克市| 扎兰屯市| 湖口县| 望城县| 芜湖县| 杭锦旗| 定州市| 上林县| 怀远县| 中超| 阳江市| 瓦房店市| 洛隆县| 山阴县| 得荣县| 徐水县| 彰武县| 阳谷县| 洛隆县| 吉隆县| 措勤县| 延安市| 灵石县| 壶关县| 且末县| 河北区| 和田县| 格尔木市| 铜陵市| 澜沧| 砚山县| 宣汉县| 尤溪县| 长子县| 晋宁县| 阿鲁科尔沁旗| 曲阳县| 太康县|