4

これがすでに議論されている場合は、お詫び申し上げます。

文字列にクリップの長さがあります:

00:10:17

それをミリ秒単位の値に変換したいと思います。(基本的に上記の文字列の場合は617000)

1つまたは2つのステップでこれを行うために使用できるAPIはありますか?基本的な方法は、文字列を分割してから、分、秒、時間を追加することです。

しかし、これを行うためのより短い方法はありますか?

ありがとう。

4

8 に答える 8

10

これは、独自に書かれた可能なアプローチの1つです(常に同じソース形式を前提としています)

String source = "00:10:17";
String[] tokens = source.split(":");
int secondsToMs = Integer.parseInt(tokens[2]) * 1000;
int minutesToMs = Integer.parseInt(tokens[1]) * 60000;
int hoursToMs = Integer.parseInt(tokens[0]) * 3600000;
long total = secondsToMs + minutesToMs + hoursToMs;
于 2013-03-14T13:29:28.243 に答える
9

手動で単純に解析できます。

String s = "00:10:17";
String[] data = s.split(":");

int hours  = Integer.parseInt(data[0]);
int minutes = Integer.parseInt(data[1]);
int seconds = Integer.parseInt(data[2]);

int time = seconds + 60 * minutes + 3600 * hours;
System.out.println("time in millis = " + TimeUnit.MILLISECONDS.convert(time, TimeUnit.SECONDS));
于 2013-03-14T13:29:02.713 に答える
8

java.time.Duration

Durationクラスを使用します。

Duration.between( 
    LocalTime.MIN , 
    LocalTime.parse( "00:10:17" ) 
).toMillis()

ミリ秒: 617000

このコードは IdeOne.com で公開されています

、、および java.timeの詳細については、この Answer of mineおよびthis Answer of mine to similar Questions を参照してください。DurationLocalTime

注意: java.time オブジェクトのナノ秒の可能な値から目的のミリ秒に変換する場合、データ損失の可能性に注意してください。

于 2017-01-03T22:36:19.960 に答える
1

ISO-8601 標準java.time.Durationに基づいてモデル化され、 JSR-310 実装の一部としてJava-8で導入されたものを使用できます。

デモ:

import java.time.Duration;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String strDuration = "00:10:17";
        int[] parts = Arrays.stream(strDuration.split(":"))
                            .mapToInt(Integer::parseInt)
                            .toArray();

        Duration duration = Duration.ZERO;
        long millis = 0;

        if (parts.length == 3) {
            millis = duration.plusHours(parts[0])
                                .plusMinutes(parts[1])
                                .plusSeconds(parts[2])
                                .toMillis();
        }

        System.out.println(millis);
    }
}

出力:

617000

注:Stream API を使用して を に変換しましString[]int[]Stream次のように、APIを使用せずに実行できます。

String strDuration = "00:10:17";
String[] strParts = strDuration.split(":");
int[] parts = new int[strParts.length];
for (int i = 0; i < strParts.length; i++) {
    parts[i] = Integer.parseInt(strParts[i]);
}

または、次のように、パーツを追加するときにパーツを解析できDurationます。

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        String strDuration = "00:10:17";
        String[] parts = strDuration.split(":");

        Duration duration = Duration.ZERO;
        long millis = 0;

        if (parts.length == 3) {
            millis = duration.plusHours(Integer.parseInt(parts[0]))
                                .plusMinutes(Integer.parseInt(parts[1]))
                                .plusSeconds(Integer.parseInt(parts[2]))
                                .toMillis();
        }

        System.out.println(millis);
    }
}

出力:

617000

Trail: Date Timeから最新の日時 API について学びます。

  1. 何らかの理由で、Java 6 または Java 7 に固執する必要がある場合は、ほとんどのjava.time機能を Java 6 & 7にバックポートするThreeTen-Backportを使用できます。
  2. Android プロジェクトで作業していて、Android API レベルがまだ Java-8 に準拠していない場合は、desugarで利用可能な Java 8+ APIと Android プロジェクトで ThreeTenABP を使用する方法 を確認してください。

Java StreamAPI に関する優れたチュートリアル:

  1. Java SE 8 ストリームを使用したデータ処理、パート 1
  2. パート 2: Java SE 8 ストリームを使用したデータ処理
  3. レッスン: 集計操作
  4. 割引
于 2021-01-19T15:38:15.003 に答える
0

Joda Time Durationクラスをチェックしてください。

于 2013-03-14T13:26:46.363 に答える
0

の適切なインスタンスを作成しますDateFormatparse()メソッドを使用してを取得しDateます。オブジェクトで使用getTime()して、ミリ秒を取得します。Date

ここで確認できます。

私はそれを次のようにテストしました:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Test {        
    public static void main(String[] args) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

        String inputString = "00:10:17";

        Date date = sdf .parse(inputString);// .parse("1970-01-01" + inputString);
        System.out.println("in milliseconds: " + date.getTime());        
    }
}
于 2013-03-14T13:28:03.790 に答える