2017-08-03 103 views
-2

其实我想从日期或时间戳字符串中找出日期格式。如何从日期或时间戳字符串中找到日期模式scala

假设如果我有“12/2/2017”日期字符串,那么结果应该是“MM/dd/yyyy”。

或者,如果我有“12-31-2017 10:12:00 AM”,结果应该是“MM-dd-yyyy HH:mm:ss a”。

任何人都可以帮助我吗?

+0

这个问题是https://stackoverflow.com/questions/12166956/understanding-jodatime-datetime-parsestring-formatter –

+1

日期可以在**的任何可能的重复**格式还是你有一组可能的格式?你如何决定** 12/2/2017 **是12月2日还是2月12日? – 2017-08-03 14:13:06

+1

@ Dr.Vick,不,不是。这是关于从传递给你的字符串中推断出模式的。这不是关于使用已知模式 –

回答

0

我昨天刚做过类似的工作。在某些情况下,我会收到“08.02.2017 14:00”的输入,在其他情况下,我会收到“8/2/17 14:00”。所以我想出了这种实用的方法:

def parseDateTime(datePart:String, timePart:String):LocalDateTime = { 
    val dateDelimiter = if (datePart.indexOf('.') != -1) "." else "/" 
    val dateFactors = datePart.split(dateDelimiter) 
    val dayPattern = if(dateFactors(1).size == 1) "d" else "dd" 
    val monthPattern = if(dateFactors(0).size == 1) "M" else "MM" 
    val yearPattern = if(dateFactors(2).size == 2) "yy" else "yyyy" 
    val formatter = DateTimeFormatter.ofPattern(monthPattern + dateDelimiter + dayPattern + dateDelimiter + yearPattern + " HH:mm") 
    LocalDateTime.parse(datePart + " " + timePart, formatter) 
    } 

如果阅读并反映一下它,你应该明白。 如果输入“08.02.2017 14:00”,则输入参数dateParttimePart的输入参数将分别为“08.02.2017”和“14:00”。 我需要这个,因为我解析了我的自动化代码中的两个文本字段。下面是使用的例子:

def startDateTime(implicit driver: WebDriver):LocalDateTime = withMainWindow{ 
    val datePart = textField(id("dateRangeFormById[0].startDate")).value 
    val timePart = textField(id("dateRangeFormById[0].startTime")).value 
    parseDateTime(datePart, timePart) 
    }