簡體   English   中英

使用JodaTime / java.time將浮點數秒轉換為毫秒

[英]Convert a floating-point number of seconds to milliseconds using JodaTime / java.time

我正在調用的API將持續時間返回為小數秒:

double seconds = someOtherApi.getDuration();

要將其轉換為毫秒,我們可以

long millis = (long) (seconds * 1000);

但是我們在代碼庫中使用JodaTime,並且希望將任何類型的轉換工作留給庫。 不幸的是,我沒有在JodaTime中看到一個合適的工廠方法需要一個double

是否有“正確”的方法將小數持續時間值轉換為Joda Duration ,或者手動將其作為最佳選項?

您需要注冊轉換器。 創建一個實現DurationConverter接口的類,並使用ConverterManager注冊它。

這是一個例子(我用JodaTime 2.10測試過):

轉換器代碼:

import org.joda.time.convert.DurationConverter;

public class DurationConverterFromDouble implements DurationConverter {

    @Override
    public Class<?> getSupportedType() {
        return Double.class;
    }

    @Override
    public long getDurationMillis(Object objectDouble) {
        return (int)(((double)objectDouble) * 1000);
    }
}

碼:

// register the converter
ConverterManager.getInstance().addDurationConverter(new DurationConverterFromDouble());

// create Duration from a double:
double d = 3.14;
Duration jodaDuration = new Duration(d);
System.out.println("Joda duration is " + jodaDuration);
System.out.println("Joda duration in milliseconds is " + jodaDuration.getMillis());

輸出:

 Joda duration is PT3.140S Joda duration in milliseconds is 3140 

有趣的是,NodaTime(C#的等效庫)不需要使用轉換器直接從double創建Duration。 我啟動了一個新的C#控制台項目,下載了NodaTime 2.3.0,通過intellisense(自動完成)使用API​​,並找到了這個解決方案:

碼:

double d = 3.14;
var nodaDuration = Duration.FromSeconds(d);
Console.WriteLine("Noda duration is " + nodaDuration);
Console.WriteLine("Noda duration in milliseconds is " + nodaDuration.TotalMilliseconds);

輸出:

 Noda duration is 0:00:00:03.14 Noda duration in milliseconds is 3140 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM