我有一个这样的日期输入日期:{ts'2012-08-13 02:30:01'}
我相信我可以用单引号转义无效部分,但我在无效部分中有一个单引号。我该如何逃避呢?我尝试了几种模式,但它不起作用。
谢谢,
我有一个这样的日期输入日期:{ts'2012-08-13 02:30:01'}
我相信我可以用单引号转义无效部分,但我在无效部分中有一个单引号。我该如何逃避呢?我尝试了几种模式,但它不起作用。
谢谢,
可以使用单引号 (') 引用文本以避免解释。
"''"
代表单引号。
所以像这样的格式字符串:
"'{ts '''yyyy-MM-dd HH:mm:ss'''}'"
应该匹配{ts '2012-08-13 02:30:01'}
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 ) ;
您是否尝试过用另一个单引号转义单引号?否则,更好的方法可能是使用正则表达式提取相关部分(引号之间),然后才应用 SimpleDateFormat。
这对我有用
SimpleDateFormat("dd MMM''yy", Locale.ENGLISH)
01 Jan'20