You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:33:29