Java 从持续时间到时间字符串的转换
我通过JSON以这种格式获取时间Java 从持续时间到时间字符串的转换,java,android,json,java-time,datetimeformatter,Java,Android,Json,Java Time,Datetimeformatter,我通过JSON以这种格式获取时间“DocTime”:“PT18H30M” 如何将此格式转换为正常字符串时间,例如android中的“6:30 pm” 目前,我找到了这个解决方案: String json = "PT18H30M"; System.out.println("Server Time: " +json); int h = json.indexOf("H"); int m = json.inde
“DocTime”:“PT18H30M”
如何将此格式转换为正常字符串时间,例如android中的“6:30 pm”
目前,我找到了这个解决方案:
String json = "PT18H30M";
System.out.println("Server Time: " +json);
int h = json.indexOf("H");
int m = json.indexOf("M");
int hrs = Integer.valueOf(json.substring(2 , h));
// System.out.println("hrs: " + hrs);
int min = Integer.valueOf(json.substring((h+1) , m));
// System.out.println("min: " + min);
String shrs = (hrs>12)? String.valueOf((hrs - 12)) : String.valueOf(hrs);
String mode = (hrs>12)? "pm" : "am";
String fTime = shrs+":"+min+" "+mode;
System.out.println("Normal Time: " +fTime);
按如下方式操作:
使用Java-8:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of((int) duration.toHours(), (int) (duration.toMinutes() % 60));
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart());
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
输出:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of((int) duration.toHours(), (int) (duration.toMinutes() % 60));
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart());
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
如果您的Android API级别仍然不符合Java-8,请检查并重试
使用Java-9:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of((int) duration.toHours(), (int) (duration.toMinutes() % 60));
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart());
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
输出:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of((int) duration.toHours(), (int) (duration.toMinutes() % 60));
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT18H30M");
LocalTime time = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart());
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
6:30 pm
请注意,和是通过Java-9引入的。Java.time通过desugaring或ThreeTenABP引入的
您似乎收到了一个字符串,其中有人误解了ISO 8601标准,并向您提供了一个字符串,表示一天中某个时间的持续时间
我建议您在时间工作中使用java.time,这是现代java日期和时间API。错误字符串的问题可以通过将其视为从00:00开始的持续时间来解决
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
String docTimeString = "PT18H30M";
Duration docTimeDur = Duration.parse(docTimeString);
LocalTime docTimeOfDay = LocalTime.MIDNIGHT.plus(docTimeDur);
String humanReadableDocTime = docTimeOfDay.format(formatter);
System.out.println(humanReadableDocTime);
输出:
下午6:30
我正在利用Duration.parse()
期望并解析ISO 8601格式这一事实
“调用需要API级别26(当前最小值为16):java.time.Duration#parse”显示
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
- 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
导入日期和时间类org.threeten.bp
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
P
,并使用18:30
或T18:30
。调用需要API级别26(当前最小值为16):java.time.Durationthis@JoydeepSaha这就是您需要通过答案中给出的desugaring链接到Java8+API的地方(另一种选择是)。“调用需要API级别26(当前最小值为16):java.time.Duration#parse”显示this@JoydeepSaha我已经在回答中提到了这一点。请也阅读这一部分。