Rumah > Java > javaTutorial > teks badan

Bolehkah Java.time Menghuraikan Pecahan Sesaat dengan Tepat?

Linda Hamilton
Lepaskan: 2024-10-28 16:08:02
asal
132 orang telah melayarinya

 Can Java.time Parse Fractions of a Second Accurately?

Bolehkah java.time Mengendalikan Fraction-of-Second Parsing?

Garis Isu:

Dalam Java 8, percubaan untuk menghuraikan pecahan-saat menggunakan pakej java.time pada mulanya membuahkan kejayaan tetapi kemudiannya menemui pengecualian. Kegagalan ini berterusan walaupun apabila memasukkan "SS" dalam corak pemformatan untuk milisaat. Walaupun dokumentasi menunjukkan keperluan untuk bilangan aksara format yang sama seperti digit input, penguatkuasaan mod yang ketat menyalahtafsirkan kekurangan aksara pecahan.

Penyelesaian:

Isu ini telah diselesaikan diselesaikan dalam Java 9. Sehingga itu, penyelesaian yang melibatkan penghuraian nilai bersebelahan tersedia:

<code class="java">DateTimeFormatter dtf = new DateTimeFormatterBuilder()
  .appendPattern("yyyyMMddHHmmss")
  .appendValue(ChronoField.MILLI_OF_SECOND, 3)
  .toFormatter();</code>
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini tidak mengendalikan contoh khusus dua digit pecahan dalam SS.

Latar Belakang Teknikal:

Simbol corak "S" mewakili mana-mana pecahan saat, termasuk nanosaat. Penghuraian nilai bersebelahan membolehkan penghurai menghuraikan medan yang dipisahkan oleh literal atau pemisah bahagian masa.

Penyelesaian Alternatif:

Disebabkan pengehadan JSR-310 dalam mengurus penghuraian nilai bersebelahan, penyelesaian alternatif wujud:

  • SimpleDateFormat (dengan kaveat):
<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date d = sdf.parse(input);</code>
Salin selepas log masuk
  • Perpustakaan pihak ketiga (mis., Joda-Time, Time4J):
<code class="java">// Joda-Time
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmssSS");</code>
Salin selepas log masuk
<code class="java">// Time4J
ChronoFormatter<PlainTimestamp> f = ChronoFormatter.ofTimestampPattern("yyyyMMddHHmmssSS", PatternType.CLDR, Locale.ROOT);</code>
Salin selepas log masuk
  • Godam DIY:
<code class="java">String input = "2011120312345655";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
int len = input.length();
LocalDateTime ldt = LocalDateTime.parse(input.substring(0, len - 2), dtf);
int millis = Integer.parseInt(input.substring(len - 2)) * 10;
ldt = ldt.plus(millis, ChronoUnit.MILLIS);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bolehkah Java.time Menghuraikan Pecahan Sesaat dengan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!