


Bagaimanakah SpringBoot memaparkan masa secara dinamik berdasarkan zon waktu sistem pengguna?
Paparan masa dinamik berdasarkan zon waktu sistem pengguna
Apabila kami menggunakan SpringBoot+Mysql untuk membangunkan sistem, kami sentiasa menetapkan zon waktu UTC+8 secara seragam, supaya apabila pengguna mengakses sistem dalam mana-mana rantau, masa yang dipaparkan ialah standard domestik Masa bukan pengalaman yang mesra pengguna Mari tunjukkan masa yang berbeza kepada pengguna dengan mendapatkan zon waktu sistem pengguna semasa.
1. Mendapatkan zon waktu pengguna
Kami boleh mendapatkan zon waktu sistem melalui JavaScript, dan kemudian menetapkannya secara seragam dalam pengepala permintaan.
Intl.DateTimeFormat().resolvedOptions().timeZone; // Asia/Shanghai
2. Kod teras
LocalDateTime digunakan secara seragam di sini untuk mengendalikan isu penukaran zon waktu dengan lebih mudah dengan mengenal pasti zon waktu yang dimiliki objek LocalDateTime semasa dan kemudian menukarnya kepada masa sasaran waktu zon.
public LocalDateTime convertLocalDateTime(LocalDateTime localDateTime, ZoneId originZoneId, ZoneId targetZoneId) { return localDateTime.atZone(originZoneId).withZoneSameInstant(targetZoneId).toLocalDateTime(); }
3. SpringBoot memproses zon waktu secara seragam apabila mengembalikan json
Apabila atur cara membaca daripada pangkalan data dan menukarnya menjadi objek LocalDateTime, dan memprosesnya dengan logik perniagaan, objek itu masih dimiliki ke zon waktu UTC+ 8, ZoneId=Asia/Shanghai yang sepadan, apabila ia perlu dikembalikan ke bahagian hadapan, anda boleh menggunakan penyeri bersiri jackson tersuai untuk menukar LocalDateTime kepada zon waktu sasaran pengguna sebelum menukarnya kepada json.
@Configuration public class JacksonConfiguration { @Autowired private JacksonProperties jacksonProperties; /** * 时区转换 * * @param localDateTime * @param originZoneId * @param targetZoneId * @return */ public static LocalDateTime convertLocalDateTime(LocalDateTime localDateTime, ZoneId originZoneId, ZoneId targetZoneId) { return localDateTime.atZone(originZoneId).withZoneSameInstant(targetZoneId).toLocalDateTime(); } /** * LocalDateTime序列化 */ public static class CustomLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { private DateTimeFormatter formatter; public CustomLocalDateTimeSerializer(DateTimeFormatter formatter) { super(); this.formatter = formatter; } @Override public void serialize(LocalDateTime value, JsonGenerator generator, SerializerProvider provider) throws IOException { generator.writeString(convertLocalDateTime(value, ZoneId.of("Asia/Shanghai"), ZoneId.of("Africa/Sao_Tome")) .format(formatter)); } } /** * LocalDateTime反序列化 * */ public static class CustomLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { private DateTimeFormatter formatter; public CustomLocalDateTimeDeserializer(DateTimeFormatter formatter) { super(); this.formatter = formatter; } @Override public LocalDateTime deserialize(JsonParser parser, DeserializationContext context) throws IOException, JacksonException { return convertLocalDateTime(LocalDateTime.parse(parser.getText(), formatter), ZoneId.of("Africa/Sao_Tome"), ZoneId.of("Asia/Shanghai")); } } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> { builder.serializerByType(LocalDateTime.class, new CustomLocalDateTimeSerializer(DateTimeFormatter.ofPattern(jacksonProperties.getDateFormat()))); builder.deserializerByType(LocalDateTime.class, new CustomLocalDateTimeDeserializer(DateTimeFormatter.ofPattern(jacksonProperties.getDateFormat()))); }; } }
Kod contoh di atas menetapkan zon waktu pengguna ZoneId=Africa/Sao_Tome, dan menyesuaikan LocalDateTime deserializer Apabila menggunakan anotasi ResquestBody, nilai atribut LocalDateTime dalam objek juga akan ditukar kepada UTC+8 The. zon waktu boleh disimpan terus ke pangkalan data tanpa pemprosesan tambahan.
4. SpringBoot menerima parameter masa dan memproses zon waktu dengan cara yang bersatu
Selain menerima parameter melalui anotasi ResquestBody seperti yang dinyatakan di atas, ia juga mungkin untuk menerima objek LocalDateTime melalui Dapatkan atau Siarkan parameter. Pada masa ini kita perlu Menyesuaikan Penukar untuk memproses penukaran String kepada LocalDateTime, dan pada masa yang sama menukar objek yang diserahkan oleh pengguna yang tergolong dalam zon waktu pengguna kepada objek zon waktu UTC+8.
rreeeeAtas ialah kandungan terperinci Bagaimanakah SpringBoot memaparkan masa secara dinamik berdasarkan zon waktu sistem pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Javadevelopmentisnotentirelyplatform-independentduetoseveralfactors.1) jvmvariationsaffecperformanceandbehavioracrossdifferentos.2) nativelibrariesviajniintroduceplatform-specificiSsues.3)

Kod Java akan mempunyai perbezaan prestasi apabila berjalan pada platform yang berbeza. 1) Strategi pelaksanaan dan pengoptimuman JVM adalah berbeza, seperti OracleJDK dan OpenJDK. 2) Ciri -ciri sistem operasi, seperti pengurusan memori dan penjadualan thread, juga akan menjejaskan prestasi. 3) Prestasi boleh ditingkatkan dengan memilih JVM yang sesuai, menyesuaikan parameter JVM dan pengoptimuman kod.

Java'splatformindecthaslimitationscludingperformanceOverhead, VersionCompateIssues, cabaranwithnativelibraryintegration, platform-specificfeatures, danjvminstallation/penyelenggaraan.

Platformindependenceallowsprogramstorunonanyplatformwithoutmodification,whilecross-platformdevelopmentrequiressomeplatform-specificadjustments.Platformindependence,exemplifiedbyJava,enablesuniversalexecutionbutmaycompromiseperformance.Cross-platformd

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

Javaispopularforcross-platformdesktopapplicationsduetoits "writeOnce, runanywhere" falsafah.1) itusesBytecodethatrunsonanyjvm-equippedplatform.2) LibrariesLikeswingandjavafxhelpcreatenativeS.3) ITseShipBareSivaryS

Alasan untuk menulis kod khusus platform di Java termasuk akses kepada ciri sistem operasi tertentu, berinteraksi dengan perkakasan tertentu, dan mengoptimumkan prestasi. 1) Gunakan JNA atau JNI untuk mengakses Windows Registry; 2) Berinteraksi dengan pemandu perkakasan khusus Linux melalui JNI; 3) Gunakan logam untuk mengoptimumkan prestasi permainan pada macOS melalui JNI. Walau bagaimanapun, menulis kod khusus platform boleh menjejaskan mudah alih kod, meningkatkan kerumitan, dan berpotensi menimbulkan risiko overhead dan keselamatan.

Java akan meningkatkan lagi kemerdekaan platform melalui aplikasi awan asli, penempatan pelbagai platform dan interoperabilitas silang bahasa. 1) Aplikasi asli awan akan menggunakan GraalVM dan Quarkus untuk meningkatkan kelajuan permulaan. 2) Java akan diperluaskan ke peranti tertanam, peranti mudah alih dan komputer kuantum. 3) Melalui Graalvm, Java akan mengintegrasikan dengan lancar dengan bahasa seperti Python dan JavaScript untuk meningkatkan interoperabilitas silang bahasa.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6
Alat pembangunan web visual

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.
