これがすでに議論されている場合は、お詫び申し上げます。
文字列にクリップの長さがあります:
00:10:17
それをミリ秒単位の値に変換したいと思います。(基本的に上記の文字列の場合は617000)
1つまたは2つのステップでこれを行うために使用できるAPIはありますか?基本的な方法は、文字列を分割してから、分、秒、時間を追加することです。
しかし、これを行うためのより短い方法はありますか?
ありがとう。
これがすでに議論されている場合は、お詫び申し上げます。
文字列にクリップの長さがあります:
00:10:17
それをミリ秒単位の値に変換したいと思います。(基本的に上記の文字列の場合は617000)
1つまたは2つのステップでこれを行うために使用できるAPIはありますか?基本的な方法は、文字列を分割してから、分、秒、時間を追加することです。
しかし、これを行うためのより短い方法はありますか?
ありがとう。
これは、独自に書かれた可能なアプローチの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;
手動で単純に解析できます。
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));
java.time.Duration
Duration
クラスを使用します。
Duration.between(
LocalTime.MIN ,
LocalTime.parse( "00:10:17" )
).toMillis()
ミリ秒: 617000
、、および java.timeの詳細については、この Answer of mineおよびthis Answer of mine to similar Questions を参照してください。Duration
LocalTime
注意: java.time オブジェクトのナノ秒の可能な値から目的のミリ秒に変換する場合、データ損失の可能性に注意してください。
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 について学びます。
Java Stream
API に関する優れたチュートリアル:
の適切なインスタンスを作成しますDateFormat
。parse()
メソッドを使用してを取得し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());
}
}