我試圖檢查日期的格式。
實作:獲取日期格式yyyy-MM-dd,然后如果我輸入超過第 12 個月和第 30 天或第 31 天取決于它必須顯示錯誤的月份。
如果我在字串中手動設定日期,該模式將起作用,但日期必須從日期到字串,但日期會自動調整。
試試這里的代碼:https ://www.programiz.com/java-programming/online-compiler/
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import java.util.Date;
import java.time.Instant;
import java.util.GregorianCalendar;
import java.time.LocalDateTime;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class HelloWorld {
public static void main(String[] args) {
Date date = new GregorianCalendar(2015, 11, 33).getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
formatter.setLenient(false);
String strDate = formatter.format(date);
Pattern dateFrmtPtrn = Pattern.compile(
"((19|20)\\d\\d)"
"-"
"(0?[1-9]|1[012])"
"-"
"(0?[1-9]|[12][0-9]|3[01])"
);
Matcher mtch = dateFrmtPtrn.matcher(strDate);
if(mtch.matches(
)){
System.out.println(strDate);
}else{
System.out.println("Error");
}
}
}
//Must Error
//Output: 2016-01-02
僅包含字串的手冊。這將起作用。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import java.util.Date;
import java.time.Instant;
import java.util.GregorianCalendar;
import java.time.LocalDateTime;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class HelloWorld {
public static void main(String[] args) {
// String datey = "2023-12-32";
String datey = "2023-13-32";
Pattern dateFrmtPtrn = Pattern.compile(
"((19|20)\\d\\d)"
"-"
"(0?[1-9]|1[012])"
"-"
"(0?[1-9]|[12][0-9]|3[01])"
);
Matcher mtch = dateFrmtPtrn.matcher(datey);
if(mtch.matches(
)){
System.out.println(datey);
}else{
System.out.println("Error");
}
}
}
//working
//Output: Error
uj5u.com熱心網友回復:
如果您切換到 a java.time.LocalDate,則可以使用在Exception嘗試LocalDate使用無效值初始化 a 時拋出的 s :
假設您只想創建一個LocalDate具有給定int值的年、年月和月日。您可以初始化一個并列印拋出try的錯誤訊息。DateTimeException
例如以下代碼將列印錯誤:
try {
// try to create December 32. 2022
LocalDate invLocDat = LocalDate.of(2022, 12, 32);
System.out.println("Created LocalDate: " invLocDat);
} catch (DateTimeException dte) {
// print what the exception says
System.err.println(dte.getMessage());
}
列印的訊息將是
Invalid value for DayOfMonth (valid values 1 - 28/31): 32
您也可以找出一年中的無效月份,例如LocalDate.of(2022, 13, 31)會導致列印上述代碼
Invalid value for MonthOfYear (valid values 1 - 12): 13
一個有效的輸入將簡單地列印toString()成功創建的方法LocalDate。DateTimeFormatter如果您想要不同的輸出,請使用 a 。
uj5u.com熱心網友回復:
Calendar 的默認行為是寬松的。
當你寫作時,Date date = new GregorianCalendar(2015, 11, 33).getTime();你得到了Date一個寬松日歷的價值,所以在 12 月 1 日之后的第 33 天。
在您的代碼中,您將格式化程式設定為寬松的,因為您要格式化的日期已經調整過了。
為避免這種情況,請創建一個日歷,將其設定為非寬松,然后設定預期日期。但請注意,在這種情況下,格式化程式不會回傳任何無效日期,因為Date物件將始終有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/484082.html
