【问题标题】:How to make the date type be defined as Date, and not as String?如何将日期类型定义为日期,而不是字符串?
【发布时间】:2021-05-07 11:17:58
【问题描述】:

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

现在的例子: 值 01.05.2021 00:00:00 typeMap String 值 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
        }

    }

【问题讨论】:

  • 您将 JSON 解析为 POJO,其中每个字段都有一个声明的类型。日期字段还应使用日期格式进行注释,例如在你的情况下,这将是 "dd.MM.yyyy HH:mm:ss""MM.dd.yyyy HH:mm:ss"
  • 为什么不使用 LocalDateTime.parse 方法?
  • 我不明白这是怎么做到的,如果代码很小,你能举个例子吗?
  • 请显示println('value ' + values + ' typeMap ' + typeMap[key])的输出
  • 您的列表的确切格式是什么? (强类型?)

标签: groovy jsonslurper


【解决方案1】:

这是一种将“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)

【讨论】:

  • 问题是我不知道如何将列表中的值从字符串更改为日期。我可以用 Date 替换 String,但是列表中有一个键值对,我需要替换其中的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2023-02-16
  • 2019-06-23
  • 2012-05-07
  • 1970-01-01
  • 2021-04-21
  • 2011-06-05
相关资源
最近更新 更多