Json使用Java中的3位小数精度序列化经过的时间(以毫秒为单位)

时间:2015-04-24 13:49:55

标签: java json gson guava

我正在使用guava中的Stopwatch类,它以微秒为单位返回经过的时间,如下所示:

long handledDuration = handleMessageWatch.elapsed(TimeUnit.MICROSECONDS);

我现在要做的是记录形成的经过时间,例如" mmmm.MMM" (m = millis,M = micros)作为某个json对象的一部分

{
   "handledPayloadId":"RQ6fa00a1f-a02d-45bd-b13e-2d9f65af4882", 
   "handledDuration":1.430 // duration in milliseconds (1 ms and 430 micros)
}

{
   "handledPayloadId":"RQ6fa00a1f-a02d-45bd-b13e-2d9f65af4882", 
   "handledDuration":1200.430 // duration in milliseconds (1200 ms and 430 micros)
}  

使用guavas秒表和Google Gson序列化程序有效实现什么?

我是否需要先通过DecimalFormat课程进行转换?

1 个答案:

答案 0 :(得分:1)

  

什么是有效的实施

如果你想要它真正有效,那么你需要为存储你long handledDuration的每个类编写一个Gson适配器,这样它的处理方式就与“普通”long不同。这是可能的,而且这可能是一场灾难,因为它太混乱了。

可能会有一个注释@GsonSerializeAsLeozillaWants,它会在Gson注册并专门处理long,但AFAIK你必须自己实现这个功能。

你可以为它编写一个类DurationMillisAndMicros和一个适配器,这应该很简单,除了使用一个对象代替一个原始的快速。 DecimalFormatString.format或通过/1000%1000进行人工转换是您遇到的最少问题。

或者你可以简单地忘记它,或者甚至在每个持续时间使用nanos(与System.nanoTime一致)并让它成为。这就是我可能会做的。