[英]Parse humanreadble time to milliseconds in Java
我正在嘗試將 4hours 或 1day 或 2months 之類的字符串轉換為毫秒。 但是我將如何有效地做到這一點而不必檢查 string.contains("h") 等......?
Node 有ms ,Java 會不會有類似的東西?
根據一些回復進行編輯:是的,實際數字可能會改變,我以 4 小時為例,但可以是 1、2、3、5 等。日期和月份相同。 是的,它們直接相鄰。 沒空間了。 示例字符串:remote 1h Go to school 輸出應為:3 600 000(毫秒)
好吧,你可以把它分解成更小的部分。
要查找出現次數,您可以使用正則表達式。 像(-?\\d+)(h|days|min|sec)
這樣的正則表達式會匹配這樣的字符串。 使用Pattern
和Matcher
會有所幫助。
要將數字轉換為毫秒,單位需要映射到與該單位的毫秒數匹配的值。 例如, days
將映射到 86400000。
雖然它不是內置的,但我覺得它並沒有那么糟糕。
String[] exampleStrings = { "4hours", "1day", "2months" };
for (String example : exampleStrings) {
long millis;
if (example.contains("hour") || example.contains("minute")
|| example.contains("second")) {
String durationString = "PT" + unitToAbbreviation(example);
Duration dur = Duration.parse(durationString);
millis = dur.toMillis();
} else {
String periodString = "P" + unitToAbbreviation(example);
Period per = Period.parse(periodString);
Duration estimatedDuration = Duration.ZERO;
for (TemporalUnit unit : per.getUnits()) {
estimatedDuration = estimatedDuration.plus(
unit.getDuration().multipliedBy(per.get(unit)));
}
millis = estimatedDuration.toMillis();
}
System.out.format("%7s -> %10d milliseconds%n", example, millis);
}
此示例的輸出為:
4hours -> 14400000 milliseconds 1day -> 86400000 milliseconds 2months -> 5259492000 milliseconds
我假設您在字符串中只有一個數字和一個單位。 這可能是2months
或1day
但不2months1day
。
天、月和年的長度是不准確的估計,因為它們的實際長度各不相同。 一個月可以是 28 到 31 天,一天可以是 23 到 25 小時。
我使用用於將下面的小的輔助方法4hours
成只是4h
所要求的Duration.parse()
String unitToAbbreviation(String withFullUnit) {
return withFullUnit.replaceFirst("(\\d+[a-z])[a-z]*", "$1");
}
如果是Period
(基於天而不是基於時間的間隔),我將迭代Period
支持的單位——年、月和日。 對於每個我使用TemporalUnit.getDuration()
來獲得它的估計持續時間和Period.get()
來獲得相應的值。 對mulitpliedBy()
的調用(不要感到驚訝)將兩者相乘。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.