亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在時間戳中的任何位置查找日期

在時間戳中的任何位置查找日期

Helenr 2022-04-28 15:49:09
有沒有辦法在時間戳的任何地方找到日期?例如,2017-01-31 01:33:30 隨機文本日志消息 x其中數據位于字符串的開頭或:2017-01-31 01:33:30 隨機文本日志消息 x日期在中間。您如何解析每個字符串以獲取 java 中的日期?
查看完整描述

2 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

是的,您可以使用下面的正則表達式來檢索日期。


Pattern p = Pattern.compile("(\\d{4}-\\d{2}-\\d{2})");

Matcher m = p.matcher("2017-01-31 01:33:30 random text log message x");


if (m.find()) {

    System.out.println(m.group(1)); //print out the date

}


查看完整回答
反對 回復 2022-04-28
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

正則表達式是矯枉過正

這里不需要棘手的正則表達式匹配。只需將日期時間文本解析為日期時間對象。


java.time

在您的示例中,僅使用了兩種格式。所以嘗試使用現代的java.time類來解析每一個。它們是相似的,一個是日期優先,另一個是時間優先。


DateTimeFormatter fDateTime = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ;

DateTimeFormatter fTimeDate = DateTimeFormatter.ofPattern( "HH:mm:ss uuuu-MM-dd" ) ;

首先,從字符串中提取前 19 個字符,只關注日期時間數據。


解析,為DateTimeParseException.


LocalDateTime ldt = null ;


try{

    if( Objects.isNull( ldt ) {

        LocalDateTime ldt = LocalDateTime.parse( input , fDateTime ) ;

    }

} catch ( DateTimeParseException e ) {

    // Swallow this exception in this case.

}


try{

    if( Objects.isNull( ldt ) {

        LocalDateTime ldt = LocalDateTime.parse( input , fTimeDate ) ;

    }

} catch ( DateTimeParseException e ) {

    // Swallow this exception in this case.

}


// If still null at this point, then neither format above matched the input.

if( Objects.isNull( ldt ) {

    // TODO: Deal with error condition, where we encountered data in unexpected format. 

}

如果您想要沒有時間的僅日期,請提取一個LocalDate對象。


LocalDate ld = ldt.toLocalDate() ;


查看完整回答
反對 回復 2022-04-28
  • 2 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號