提问人:Ray Bond 提问时间:10/12/2023 最后编辑:Mark RotteveelRay Bond 更新时间:10/12/2023 访问量:121
无法识别简单日期格式
Simple Date format not recognised
问:
我在 Windows 10 上使用 Java 17 使用简单日期格式。
我正在尝试获得这样的日期格式,但我得到了.日期位于 Jackson 2.15 ObjectMapper 中。2023-10-12 21:26:16
2023-Oct-12 21:26:16
这是我的代码:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", new Locale("en", "NZ")));
ErrorMessage errorMessage = new ErrorMessage();
...
String jsonMessage = objectMapper.writeValueAsString(errorMessage.builder()
.message(mostSpecificCauseMessage)
.timeStamp(sdf.format(System.currentTimeMillis()))
.build());
我错过了什么,我怎样才能与 vs 约会?2023-10-12 ....
2023-Oct-12...
答:
1赞
Peng
10/12/2023
#1
您的代码中可能存在潜在的原因,其中 JSON 中的日期列将是字符串,而不是日期,因此您可以尝试以下代码片段,它可以帮助您意识到问题。
@Test
@SneakyThrows
public void test () {
ObjectMapper objectMapper = new ObjectMapper();
// Configure the date format with a specific locale
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", new Locale("en", "NZ"));
objectMapper.setDateFormat(sdf);
// Create an instance of ErrorMessage and set its properties
// ...
// Serialize the ErrorMessage object to a JSON string
String jsonMessage = objectMapper.writeValueAsString(new Date());
System.out.println(jsonMessage);
}
这就是结果
"2023-10-12 08:56:57.984+0000"
1赞
Mikhail2048
10/12/2023
#2
有几件事需要考虑:
首先,您的类有一个时间戳字段,该字段是 String 或 StringBuffer,但不是日期(因为您是通过 设置它的)。因此,对于此时间戳字段,行:ErrorMessage
sdf.format(System.currentTimeMillis())
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", new Locale("en", "NZ")));
基本上不做任何事情,因为 for Jackson 字段只是 ,而不是任何 Java 日期/时间 API 类。timestamp
String/StringBuffer
第二 - 你的情况是什么样子的?这就是从纪元中实际格式化了几毫秒的内容。如果它看起来像 ,那么你应该得到你想要的结果。有关更详细的解释,您应该提供一个支持 .sdf
yyyy-MM-dd HH:mm:ss.SSSZ
sdf
评论
1赞
Ray Bond
10/12/2023
我犯了一个愚蠢的错误,错过了设置 sdf 的代码 - - 一旦纠正了这一点,我就得到了我想要的格式。正如您所指出的,objectMapper 行不执行任何操作。private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
0赞
Just another Java programmer
10/12/2023
请注意,如果坚持 SimpleDateFormat,请不要将其设置为静态,因为它不是线程安全的。
评论
timestamp
String
Date
Oct
MMM
java.time
SimpleDateFormat
java.util.Date
sdf
java.util
java.time
Date
SimpleDateFormat