我的日期输入日期如下: {ts'2012-08-13 02:30:01'}
我相信我可以使用单引号来逃避无效部分,但我在无效部分中有一个单引号。我怎么逃避?我尝试了几种模式,但它无法正常工作。
谢谢,
答案 0 :(得分:9)
根据javadocs for SimpleDateFormat
可以使用单引号(')引用文本以避免解释。
"''"
代表单引号。
所以格式字符串如:
"'{ts '''yyyy-MM-dd HH:mm:ss'''}'"
应匹配{ts '2012-08-13 02:30:01'}
答案 1 :(得分:2)
您是否尝试过另一个单引号转出单引号?否则,更好的方法可能是使用正则表达式来提取相关部分(引号之间),然后才应用SimpleDateFormat。
答案 2 :(得分:1)
LocalDateTime.parse(
"{ts '2012-08-13 02:30:01'}"
.replace( "{ts '" , "" ) // Delete prefix.
.replace( "'}" , "" ) // Delete suffix.
.replace( " " , "T" ) // Yields `2012-08-13T02:30:01`. In standard ISO 8601 format.
) // Returns a `LocalDateTime` object.
SimpleDateFormat
已过时,由JSR 310中定义的现代 java.time 类取代。
java.time.DateTimeFormatter
使用DateTimeFormatter
来定义用于解析/生成字符串的格式设置模式。
该类使用一对单引号''
作为单引号的转义值。否则,将使用单引号将格式器标记为要标记的文本。
但您的情况下无需自定义格式设置模式。您的内部文本几乎符合 java.time 中默认使用的ISO 8601标准。只需对输入文本进行一些字符串操作即可。
String input =
"{ts '2012-08-13 02:30:01'}"
.replace( "{ts '" , "" )
.replace( "'}" , "" )
.replace( " " , "T" )
;
收益2012-08-13T02:30:01
。
LocalDateTime
然后解析为LocalDateTime
对象。
LocalDateTime ldt = LocalDateTime.parse( input ) ;
答案 3 :(得分:0)
这对我有用
SimpleDateFormat("dd MMM''yy", Locale.ENGLISH)
01 Jan'20