0

在我的 json 中有一个值为“01.05.2021 00:00:00”的字段,我需要将类型定义为日期,但显然由于引号,它被定义为“字符串”。如何确保类型是“日期”而不是字符串?我可以将 String 更改为 Date,但是如何在从 JSON 获得的列表中执行此操作?

现在的示例: value 01.05.2021 00:00:00 typeMap String value 6 typeMap Integer

   def getTypeDef(def value) {
        (value instanceof BigDecimal) ? "Double" : value.getClass().simpleName
    }
 def list = jsonSlurper.parseText JSON
 def typeMap = [:].withDefault { key -> "String" }
            list.each { map ->
                map.each { key, values ->
                    if (values != null) {
                        typeMap[key] = getTypeDef(values)
                        println('value ' + values + ' typeMap ' + typeMap[key])
                        //typeMap[key] = values.getClass().simpleName
                    }
                }
            }
def types = names.collect { name -> typeMap[name] } 

我可以这样做,但问题是该值仍然是一个字符串,而不是日期,但我会在 println 中得到 Date。

    def getTypeDef(def value) {
        if (value ==~ /^(0?[1-9]|[12][0-9]|3[01])[\\/\-.](0?[1-9]|1[012])[\\/\-.]\d{4}\s[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9]\u0024/){
            (value instanceof String) ? "Date" : value.getClass().simpleName
        }
        else{
            (value instanceof BigDecimal) ? "Double" : value.getClass().simpleName
        }

    }
4

1 回答 1

0

这是一种将“2020.04.19 12:10:36”格式的字符串转换为日期类型的方法。

输入:

def date = convertStringToDate("2020.04.19 12:10:36")
def sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")
println sdf.format(date)

输出:

2020.04.19 12:10:36

代码:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.time.*;
import java.time.LocalDateTime;  
import java.time.format.DateTimeFormatter;

def convertStringToDate(String str) {
    //needed format: String dateStr = "2020.04.19 12:10:36";
    DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss");
    LocalDateTime dateTime = LocalDateTime.parse(str, pattern);
    Date convertedDatetime = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
    assert convertedDatetime instanceof Date
    return convertedDatetime
}
assert convertStringToDate("2020.04.19 12:10:36") instanceof Date

def date = convertStringToDate("2020.04.19 12:10:36")
def sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")
println sdf.format(date)
于 2021-05-07T15:07:45.990 回答