java - jconsole 时间格式是什么?
问题描述
我最近使用 jconsole 监控了我的 java 程序。我将 CPU 使用率数据保存为 csv 文件。这就是我所拥有的:
Time,CPU Usage
43690.008014,1,8
43690.008060,0,1
43690.008106,0,1
43690.008153,0,1
43690.008199,0,1
43690.008245,0,1
CPU Usage
专栏很清楚,但我不能对专栏说同样的话Time
。是什么43690.008014
?我怎样才能把它解析成Date
?我这辈子没见过这样的事。
解决方案
CSV 文件中记录的持续时间是从1899-12-31
1开始的天数。为了获取当前日期,您可以将此持续时间添加到LocalDate.of(1899, 12, 30).atStartOfDay().atOffset(ZoneOffset.UTC)
. 我建议您使用java.time.Duration
它以ISO-8601 标准为模型,并作为JSR-310 实现的一部分与Java-8一起引入。该函数为您提供表示指定的纳秒数。尽管已经有一个函数,但我建议您使用此函数的原因是这些函数将一个值作为参数,如果您将日志文件(例如)中的持续时间转换为,其小数部分将给你一个不正确的结果。Duration#ofNanos
Duration
Duration#ofDays
long
43690.008014
long
因此,将这些天数转换为纳秒,Duration
从生成的纳秒中获取并将其添加LocalDate.of(1899, 12, 30).atStartOfDay().atOffset(ZoneOffset.UTC)
到UTC
.
演示:
import java.time.Duration;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
OffsetDateTime startDateTime = LocalDate.of(1899, 12, 30).atStartOfDay().atOffset(ZoneOffset.UTC);
OffsetDateTime current = startDateTime
.plus(Duration.ofNanos((long) (43690.008014 * 24 * 60 * 60 * 1000_000_000)));
System.out.println(current);
}
}
输出:
2019-08-13T00:11:32.409600512Z
从Trail: Date Time了解现代日期时间 API 。
- 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。
- 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring和How to use ThreeTenABP in Android Project检查Java 8+ APIs available。
推荐阅读
- batch-file - 批量引号内的通配符?
- plot - 如何使用 Plots.jl 将特定的 x 刻度、标签和垂直线添加到绘图中?
- gradle - 在多模块 gradle 项目中使用 maven-publish 插件没有依赖关系的 pom.xml
- javascript - Angular:不允许添加
- regex - Perl 中的 grep 问题
- azure-ad-b2c - Azure AD B2C 错误 $i2e.sendDataWithRetry 不是 login.microsoft.com 上的函数
- r - R将每个数据框元素变成多个n元素
- c# - 使用 For 循环在单个查询中插入多个文本框和标签值
- ios - 登录按钮在仅从 iOS 10 中的 URL 加载的 WKWebView 中不起作用
- oop - 下面是可变类还是不可变类?