在Eclipse MAT的OQL中如何将LocalDateTime转为可读字符串?
在Eclipse MAT的OQL中转换LocalDateTime为可读字符串
在Eclipse MAT的堆快照查询里,直接调用LocalDateTime.toString()无法返回可读字符串,是因为MAT的OQL环境限制,无法正常执行该对象的toString方法。你可以直接访问LocalDateTime的内部字段,手动拼接成可读的日期时间格式。
基础版本OQL查询
SELECT mci.firstName.toString(), CONCAT( mci.importantDateTime.year, '-', mci.importantDateTime.month.value, '-', mci.importantDateTime.dayOfMonth, ' ', mci.importantDateTime.hour, ':', mci.importantDateTime.minute, ':', mci.importantDateTime.second, '.', mci.importantDateTime.nanos ) AS mydatetime FROM com.example.MyClass$Inner mci WHERE mci.firstName.toString() = "John"
带补零的优化版本(适配标准日期格式)
如果需要个位数的月、日、时、分、秒自动补零(比如2024-05-03 09:05:02),可以用CASE判断补零:
SELECT mci.firstName.toString(), CONCAT( mci.importantDateTime.year, '-', CASE WHEN mci.importantDateTime.month.value <10 THEN CONCAT('0', mci.importantDateTime.month.value) ELSE mci.importantDateTime.month.value END, '-', CASE WHEN mci.importantDateTime.dayOfMonth <10 THEN CONCAT('0', mci.importantDateTime.dayOfMonth) ELSE mci.importantDateTime.dayOfMonth END, ' ', CASE WHEN mci.importantDateTime.hour <10 THEN CONCAT('0', mci.importantDateTime.hour) ELSE mci.importantDateTime.hour END, ':', CASE WHEN mci.importantDateTime.minute <10 THEN CONCAT('0', mci.importantDateTime.minute) ELSE mci.importantDateTime.minute END, ':', CASE WHEN mci.importantDateTime.second <10 THEN CONCAT('0', mci.importantDateTime.second) ELSE mci.importantDateTime.second END ) AS mydatetime FROM com.example.MyClass$Inner mci WHERE mci.firstName.toString() = "John"
说明
LocalDateTime的month字段是java.time.Month枚举类型,需要访问其value属性获取数字形式的月份。- 可以根据需求调整格式,比如不需要纳秒就去掉
.nanos部分,或者修改分隔符。
内容的提问来源于stack exchange,提问作者Leprechaun
相关产品推荐
相关产品推荐

