如何将日期类型定义为日期,而不是字符串?

时间:2021-05-07 11:17:58

标签: groovy jsonslurper

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

现在的例子: 值 01.05.2021 00:00:00 typeMap 字符串 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 中得到日期。

    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
        }

    }

1 个答案:

答案 0 :(得分: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)