如何在java的SimpleDateFormat中转义单引号

时间:2012-08-13 20:29:29

标签: java date simpledateformat

我的日期输入日期如下: {ts'2012-08-13 02:30:01'}

我相信我可以使用单引号来逃避无效部分,但我在无效部分中有一个单引号。我怎么逃避?我尝试了几种模式,但它无法正常工作。

谢谢,

4 个答案:

答案 0 :(得分:9)

根据javadocs for SimpleDateFormat

  

可以使用单引号(')引用文本以避免解释。 "''"代表单引号

所以格式字符串如:

"'{ts '''yyyy-MM-dd HH:mm:ss'''}'"

应匹配{ts '2012-08-13 02:30:01'}

答案 1 :(得分:2)

您是否尝试过另一个单引号转出单引号?否则,更好的方法可能是使用正则表达式来提取相关部分(引号之间),然后才应用SimpleDateFormat。

答案 2 :(得分:1)

tl; dr

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.

java.time

SimpleDateFormat已过时,由JSR 310中定义的现代 java.time 类取代。

java.time.DateTimeFormatter

使用DateTimeFormatter来定义用于解析/生成字符串的格式设置模式。

该类使用一对单引号''作为单引号的转义值。否则,将使用单引号将格式器标记为要标记的文本。

简单的文本操作即可获取ISO 8601字符串

但您的情况下无需自定义格式设置模式。您的内部文本几乎符合 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