我从https://stackoverflow.com/a/18217193/6727914
val df1: DateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
val string1 = "2022-12-29T19:59:20.783357Z"
val result1: Date = df1.parse(string1)
但是它不工作:
线程"main"异常java.text.ParseException: Unparseable date:"2022 - 12 - 29 t19:59:20.783357z"at java.text.DateFormat.parse (:-1)
at FileKtmain (File.kt:13)在FileKt。主要(File.kt: 1)
我不能使用Instant.parse(date)
日期"2022-12-29T19:59:20.783357Z"是一个有效的Iso8601String,其中783是毫秒,357是微秒
SimpleDateFormat
不能处理微秒级的分辨率,它的极限是毫秒级的分辨率。如果您尝试按原样解析它,您将得到错误的结果,如以下答案所示。
你有两个选择:
- 截断秒的分数到毫秒的分辨率。 如本文所述,使用ThreeTenABP或Android去糖支持。然后,您可以使用
Instant#parse
将日期时间字符串解析为Instant
。
注意:你需要在你的模式中使用X
而不是Z
。
:
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) throws ParseException {
var df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
var string1 = "2022-12-29T19:59:20.783357Z";
string1 = string1.replaceAll("(\.\d{3})\d+", "$1");
var result1 = df1.parse(string1);
System.out.println(result1);
}
}
我所在时区的输出,欧洲/伦敦:
Thu Dec 29 19:59:20 GMT 2022
使用java解决方案。时间API
import java.time.Instant;
import java.util.Date;
public class Main {
public static void main(String[] args) {
var instant = Instant.parse("2022-12-29T19:59:20.783357Z");
System.out.println(instant);
// For any reason, if you need java.util.Date
var date = Date.from(instant);
System.out.println(date);
}
}
<<p>在线演示/kbd>