1. Pengetahuan Persiapan
1.
2016-3-13, 02:00:00 hingga 2016-11-6, 02:00:00
2017-3-12, 02:00:00 hingga 2017-11-5, 02:00:00
2. ID zona waktu tiga huruf
Untuk kompatibilitas dengan JDK 1.1.x, beberapa ID zona waktu tiga huruf (seperti "PST", "CTT", "AST") juga didukung.
Namun, penggunaannya dibuang karena singkatan yang sama sering digunakan di beberapa zona waktu
Misalnya, CST: memiliki 4 makna, Amerika Serikat, Australia, Cina, waktu Kuba
3. Standar
GMT: Green Mean Time Greenwich Standard Time, digunakan sebagai Referensi Waktu Standar GMT+12-> GMT-12 sebelum 1960
Kisaran Java8 adalah GMT+18-> GMT-18
UTC: Waktu universal terkoordinasi mengoordinasikan waktu dunia, yang lebih akurat daripada GMT, dan menjadi standar baru pada 1 Januari 1972; UTC, UTC+1, UTC+2 ... UTC+12, UTC-12 ... UTC-1
Java8's Range UTC-18-> UTC+18
DST: Waktu penghematan siang hari mengacu pada waktu ketika jam dinaikkan selama satu jam di musim panas untuk menggunakan sinar matahari sebelumnya. Ini disebut waktu musim panas di Inggris;
Saat ini, lebih dari 110 negara menggunakan waktu penghematan siang hari;
Di Cina, itu hanya diterapkan selama 6 tahun dari 1986 hingga 1992, dan dibatalkan setelah itu; Alasannya adalah sebagai berikut:
1. Cina memiliki rentang besar di arah timur dan barat, dan mengadopsi distrik kedelapan timur yang bersatu, yang tidak sesuai dengan timur dan barat menggunakan waktu penghematan siang hari;
2. Di daerah lintang tinggi, waktu dan malam sangat berubah di musim dingin dan musim panas; itu tidak terlalu berarti;
4. Ini dapat digunakan untuk menunjukkan bahwa Distrik Kedelapan Timur adalah: GMT+8 atau ETC/GMT-8 (sebaliknya, mengapa? Karena pengembang PHP percaya bahwa Distrik Kedelapan Timur lebih cepat dari ini.
5. Cara Mewakili Zona Waktu Tiongkok
GMT+8
UTC+8
Asia/Harbin Harbin // China Standard Time
Asia/Chongqing Chongqing // China Standard Time
Asia/Chungking Chongqing // China Standard Time
Asia/Urumqi Urumqi // China Standard Time
Asia/Shanghai Shanghai (Distrik 8 Timur) // Waktu Standar China
RRC
Asia/Makau Makau // Waktu Standar China
Hongkong Hong Kong // Hong Kong waktu konsisten dengan waktu standar Cina
Asia/Hong_Kong Hong Kong
Asia/Taipei Taipei (Taiwan) // China Standard Time Singapura sama dengan waktu Tiongkok;
Asia/Singapura
Singapura
6. Representasi zona waktu standar
UTC
UTC+0
UTC-0
GMT GMT
GMT0 GMT
ETC/GMT GMT
ETC/GMT+0 GMT
ETC/GMT-0 GMT
ETC/GMT0 GMT0 GMTS Standar Waktu Catatan: GMT+XX (-xx) sangat inklusif dan dapat secara otomatis mengidentifikasi representasi dari berbagai waktu.
2. Konversi zona waktu
Lingkungan: Sebelum Java8
1. Konversi waktu saat ini ke tampilan zona waktu yang ditentukan
@Test public void test () melempar Exception {Date a = new Date (); SimpleDateFormat sf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); sf.settimezone (timezone.gettimezone ("Amerika/new_york")); // Konversi zona waktu Cina ke zona waktu New York dari Amerika Serikat System.out.println (sf.format (a)); }2. Waktu yang ditentukan dikonversi ke tampilan zona waktu yang ditentukan
Bisakah saya benar -benar mengonversi dengan benar? Tampaknya ada jebakan, saya melihat implementasi online
Saya merasa sedikit masalah dengan waktu penghematan siang hari
// Metode Implementasi 1: Waktu penghematan siang hari tidak dipertimbangkan @test public void test2 () melempar pengecualian { /tanggal datetime = new SimpleDeFormat ("yyyy-mm-dd hh: mm: ss"). Parse ("2016-11 14:00:00"); Tanggal datetime = new SimpleDeFormat ("yyyy-mm-dd hh: mm: ss"). Parse ("2016-10-6 14:00:00"); Timezone zhong = timezone.gettimezone ("GMT+8: 00"); // China Timezone York = timezone.gettimezone ("Amerika/new_york"); // GMT-5 // Offset zona waktu di sini sudah diperbaiki, tidak ada waktu penghematan siang hari, kesalahan long chinesemills = datetime.getTime () + York.getRawoffset ()-zhong.getRawoffset (); Tanggal Tanggal = Tanggal Baru (Chinesemills); System.out.println (new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"). Format (tanggal)); } //Implementation method 2 You may recall that using Calendar.DST_OFFSET of the Calendar class //It is still not right to Calendar.DST_OFFSET This is dead @Testpublic void test3() throws Exception {//Date time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 14:00:00");//Date time = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"). parse ("2016-11-6 1:00:00"); // Tanggal waktu = new SimpledEformat ("yyyy-mm-dd hh: mm: ss"). parse ("2016-11-6 1:00,00"); date ("date (" 2016-11-6:00 "); HH: MM: SS "). Parse (" 2016-11-6 0:59:00 "); // Tanggal waktu = new SimpleDateFormat (" yyyy-mm-dd hh: mm: ss "). Parse (" 2016-11-6 1:59:59 "); Tanggal waktu = new SimplateFormat (" yyy-mm-mm HH: MM: SS "). Parse (" 2016-11-6 3:00:00 "); // 1. Dapatkan waktu setempat: kalender cal = calendar.getInstance (); cal.settime (waktu); cal.settimeZone (timezone.gettime non-fixed (" America/new_york "));//2. cal.get (calendar.zone_offset)/(1000*60*60); // 3. Dapatkan perbedaan waktu penghematan siang hari: Ini diperbaiki, tidak didasarkan pada penilaian waktu yang dinamis. Selama ada waktu penghematan siang hari di zona waktu, itu adalah 1int dstoffset = cal.get (calendar.dst_offset)/(1000*60*60); System.out.println (zona -offset); System.out.println (dstoffset); // 4. Sedangkan perbedaan ini dari waktu lokal untuk mendapatkan waktu untuk mendapatkan waktu lokal. -(ZoneOffset + dstoFfset)); cal.add (calendar.hour, -(zonaoffset + dstoffset)); tanggal waktu2 = cal.getTime (); System.out.println (Format SimpleDate ("yyyy -mm -dd hh: mm: ss"). Format (waktu2)); // Metode Implementasi 3 Persiapan // Tidakkah dikatakan bahwa Java akan secara otomatis menangani waktu penghematan siang hari untuk kita? // Mari kita pertama kali melakukan tes sederhana untuk melihat apakah metode penilaian waktu penghematan siang hari sudah benar, dan Anda dapat menyimpulkan apakah pemrosesan otomatis Java benar // diketahui bahwa pada tahun 2016: uji waktu Amerika/new_york adalah 02.13 02.00) (Public,/Konvonen Konvonen.00 (Publis.). titik referensi SimpleDateFormat sf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); sf.settimezone (timezone.gettimezone ("gmt+0")); // tanggal datetime = sf.parse ("2016-11-6 5:59:59"); Tanggal D1 = SF.Parse ("2016-03-13 6:59:59"); // Tanggal palsu D2 = sf.parse ("2016-03-13 7:00:00"); // Tanggal True D3 = Sf.Parse ("2016-11-6 6:59:59");//Tanggal Palsu D4 = SF.PARSE/SF.PARE 2016-6 6:59 "); Ditemukan bahwa memang tidak ada masalah dalam menilai dimulainya waktu penghematan siang hari, tetapi untuk akhir waktu penghematan siang hari, tepatnya, saya telah menilai satu jam sebelumnya // Lihatlah verifikasi di bawah ini, jadi mengapa ini satu jam sebelumnya? Bagaimana cara menyelesaikannya? Saat ini, saya hanya bisa menggunakan java8 d3 = sf.parse ("2016-11-6 5:59:59"); // true d4 = sf.parse ("2016-11-6 6:00:00"); // false timezone York = timezone.gettimezone ("Amerika/new_york"); // GMT-5 System.out.println ("Apakah zona waktu target menggunakan waktu penghematan siang hari:"+isdaylight (York, d1)); System.out.println ("Apakah zona waktu target menggunakan waktu penghematan siang hari:"+isDaylight (York, D2)); System.out.println ("Apakah zona waktu target menggunakan waktu penghematan siang hari:"+isDaylight (York, D3)); System.out.println ("Apakah zona waktu target menggunakan waktu penghematan siang hari:"+isdaylight (York, d4)); } // menilai apakah boolean private isdaylight (zona waktu, tanggal tanggal) {return zona.usedaylighttime () && zona.indaylighttime (tanggal); } // Metode Implementasi 3 // Melalui verifikasi di atas, kita tahu bahwa penilaian sistem bermasalah. Dengan mengatur zona waktu, program secara otomatis menangani waktu penghematan siang hari. Setidaknya saya tidak dapat mengerti mengapa @testpublic void test5 () melempar Exception {// 13 jam terpisah Cina + 8 New York-5 Changezone ("2016-3-13 14:59:59", "Prc", "America/New_York", "-03-13:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:5:13:30 15:00:00", "PRC","America/New_York", "yyyy-MM-dd HH:mm:ss");//2016-03-13 03:00:00 ChangeZone("2016-11-6 13:59:59", "PRC","America/New_York", "yyyy-MM-dd HH:mm:ss");//2016-11-06 01:59:59 // Hasil ini salah, harus 02:00:00 Changezone ("2016-11-6 14:00:00", "PRC", "America/New_York", "YYYY-MM-DD HH: MM: SS"); // 2016-11-06 01:00: MM: SS "); // 2016-06 01:00:00}/MM: SS");/2016-06 waktu, string srcid, string destId, pola string) melempar parseException {// atur zona waktu default zona zona zona = timezone.gettimezone (srcid); Timezone.setDefault (zona); Tanggal Tanggal = New SimpleDeFormat (Pola) .Parse (waktu); // Atur zona waktu target waktu zona waktu nona = timezone.gettimezone (destid); SimpleDateFormat SDF = new SimpleDateFormat (pola); // Atur zona waktu yang akan diformat SDF.Settimezone (DestZone); String changtime = sdf.format (tanggal); // Dapatkan target zona waktu System.out.println ("Setelah memodifikasi zona waktu" + destzone.getId () + "waktu:" + changtime); }Ringkasan: Hasil yang diperoleh dengan tiga metode implementasi di atas agak bermasalah untuk waktu penghematan siang hari
Tiga, implementasi Java8
1. Mari kita lihat perubahan zona waktu di Java 8 terlebih dahulu
// zona waktu yang tersedia JDK8 @testpublic void testName1 () melempar Exception {// zona sepanjang masa jdk8 set <string> id = zoneid.getAvailableZoneIds (); string [] id1 = ids.toArray (IDS.Size ()); string idss = arrays. ",]"); System.out.println (ids.size ()); // 28 Zona Waktu yang Hilang Sebelum String JDK8 [] ID2 = TimeZone.GetaVailableIds (); System.out.println (id2.length); //623//Find out the for (String id: id2) {if (!idss.contains(id+",")) {System.out.print(id+",");}}//Conclusion: All time zones in jdk8 have all been deleted before //jdk8 as follows: //There are some time zones that are easily ambiguous// EST, HST, MST, ACT, AET, AGT, ART, AST, BET, BST, CAT, CNT, CST, CTT, EAT, ECT, IET, IST, JST, MIT, NET, NST, PLT, PNT, PRT, PST, SST, VST, // tetapi nama pendek ini sebenarnya masih tersedia, mereka hanya tidak tersedia dalam daftar dukungan localdateMime = LocalDateTime.ofinstant (instant.now (), zonaid.of (zonaid.short_ids.get ("pst"))); System.out.println ("/ndate =" + date);}2. Cara menambahkan informasi zona waktu, atau mengonversinya
// LocalDate, LocalDateTime, Instan Tambah Informasi Zona Waktu @testpublic void testName3 () {LocalDate Date = localDate.now (); // LocalDate Tambahkan Informasi Zona // Metode 1ZonedDateTime Zone = date.atstartOfday (zoneId.of ("GMT+08: o 00")); date.atstartofday (zonaid.systemdefault ()); System.out.println (zona); // Metode 2 LocalDate Date2 = LocalDate.now(ZoneId.of("GMT+0"));System.out.println(date2);System.out.println("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- zoneime3 = localDateTime.now (clock.system (zonaid.of ("gmt+0"))); // metode 4zonedDateTime zoneNetime4 = zonedDateTime.of (waktu, zonetime2 ("gmt+0"); sistem.out.out.println (zonetime); System.out.println (zonetime3); // ubah system.out.println (zonetime4); // ubah System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3. Cara mendapatkan waktu yang ditentukan dari waktu saat ini (tes dihilangkan)
// Dapatkan zona waktu yang ditentukan dari waktu saat ini, titik referensi: 0 zona waktu localdatetime getCurrentZonetime (zonaid dest) {objects.requirenonnull (dest); LocalDateTime time2 = localDateTime.now (clock.system (dest)); String zonedesc = getzonedesc (timezone.gettimezone (dest)); System.out.println (dest.getId ()+"sesuai dengan zona waktu standar:"+zonedesc); System.out.println ("Target Time Zone"+Dest+"Time"+Time2.Format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); return time2;} // Dapatkan zona waktu standar, metode 1 // Metode sebelum jdk8, gunakan string statis swasta timeZone getzonedesc (timeZone destzone) {objects.requirenonnull (destzone); int offset = destzone.getRawOffset () / (1000 * 60 * 60); if (offset <= 0) {return "gmt"+string.valueof (offset); } else {return "gmt +" + string.valueof (offset); }} // metode java8, metode 2, gunakan zonerules // dapatkan offset standar zona waktu, zonerules.getstandardoffset // Dapatkan offset aktual dari zona waktu (offset yang diperoleh akan berubah sesuai dengan waktu penghematan siang hari) // Get Standar Zona waktu (offset yang dihasilkan akan berubah sesuai dengan waktu penghematan siang hari) // aturan.getstandardoffset (zonedDateTime.now (dest) .toinstant ()). getId (); String S = StandardOffset.split (":") [0]; int offset = integer.parseint (s); // Return Metode 1: dengan jam dan menit // return "GMT"+StandardOffset; // Return Metode 2: dengan jam hanya jika (offset> 0) {return "gmt+"+offset;} else {return "gmt"+offset;}}4. Cara mendapatkan waktu yang ditentukan dari zona waktu yang ditentukan
Mulailah menerapkan masalah zona waktu yang tersisa di atas
Demikian pula, mari kita lihat apakah metode penilaian waktu penghematan siang hari menggunakan Java8 benar.
// Tulis tangan pertama untuk menentukan apakah waktu di Amerika Serikat adalah di siang hari penghematan waktu public boolean isderlighttime (localDateTime a) {objeks.requirenonnull (a); StartDateTime startDate = a.withmonth (3) .TolocalDate (). Attime (2, 0); LocalDateTime startlightday = startDate.with (Temporaladjusters.dayofweekInmonth (2, Dayofweek.sunday)); // Perbarui ke November LocalDateTime Enddate = a.with Month (11) .TolocalDate (). Attime (1, 59.59); Localdatime endDeray (). endDate.with (temporaladjusters.dayofweekinmonth (1, dayofweek.sunday)); if (a.isbefore (startlightday) || a.isAfter (endlightday)) {System.out.println ("tidak dalam waktu penghematan siang hari"+a); return false;} System.out.println ("tidak pada hari penghematan siang hari"+a); return false;} System.out.println ("not di siang hari"+a); return false;} system.out.println ("not daylight time waktu"+a); return false;} system.out.outln Faktanya, java8 sudah ada metode siap pakai, yang lebih baik dari milik saya // lulus di zona waktu dan waktu yang ditentukan, boolean isderlighttime (localDateTime A, zoneid dest) {zonedDateTime z1 = A.atzone (dest); // atau transfer ke arah ini // zonedDatetime z2 = zonedDateTime.of (a, dest); System.out.println (z1.format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss"))); Aturan zonerules = dest.getrules (); bendera boolean = aturan. System.out.println (flag); Bendera pengembalian; }// UJI, dan menemukan bahwa metode waktu penghematan siang hari Java8 benar -benar benar
//It is known that 2016: America/New_York's daylight saving time is: 2016-3-13 02:00:00 to 2016-11-06 01:59:59 // (The second Sunday of March and the first Sunday of November each year) @Testpublic void testName() throws Exception {//LocalDateTime a1=LocalDateTime.now(); LocalDatetime a2 = localDatetime.of (2016, 3, 13, 1, 59,59); LocalDateTime a3 = localDatetime.of (2016, 3, 13, 2, 00); localDatetime a4 = localDatetime.of (2016, 11, 6, 1, 59.59); localDatetime a5 = localdateTime.of (2016, 11, 6, 2, 0,0); // isdaylighttime (a2); // isdaylighttime (a3); // isdaylighttime (a4); // isdaylighttime (a5); system.out.println ("=============================================== ======================================================================== ======================================================================== ======================================================================== ======================================================================== ======================================================================== ======================================================================== ); // falageagndaylighttime (a3, zonaid.of ("amerika/new_york")); // trueisdaylighttime (a4, zoneid.of ("amerika/new_york")); // trueisdaylighttime (a5, zoneid.of ("amerika/new_york")); // fasle}Mulailah menerapkan:
Versi 1:
// Dapatkan titik referensi waktu yang ditentukan untuk waktu yang ditentukan: zona waktu default localdatetime getzongtime (localDateTime time, zonaid dest) {objects.requirenonnull (dest); kembali getzongtime (waktu, nol, dest); } // Anda tidak dapat mengurangi dari ZonedDateTime dari 2 zona waktu, karena begitu Anda menentukan zona waktu di sini, waktu ini adalah zona waktu ini localdateTime getzongtime (localDateTime Time, zonaid src, zonaid dest) {// kesulitannya adalah cara menemukan offset // zona waktu default di sini adalah Cina, dan Amerika Serikat adalah negara bagian. Ini mungkin lebih cocok untuk objek.requirenonnull (dest); ZonedDatetime z1 = null; if (src == null) {z1 = time.atzone (zonaid.systemdefault ()); } else {z1 = time.atzone (src); } // Perubahan respons zona waktu dalam waktu zoneddatetime z2 = z1.withzonesameInstant (dest); System.out.println (dest.getId ()+"sesuai dengan zona waktu standar:"+getzonedesc (timezone.gettimezone (dest))); System.out.println ("Target Time Zone"+Dest+"Time"+Z2.Format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); System.out.println ("-----------------"); waktu pengembalian; }Tesnya adalah sebagai berikut:
@Test public void test6 () melempar Exception {// diharapkan tidak berada di Daylight Saving Time2016-03-13 01:59:59 LocalDateTime Time4 = localDateTime.of (2016, 3, 13, 14, 59, 59); getzongtime (time4, zoneid.of ("amerika/new_york")); // Diharapkan di Daylight Saving Time2016-03-13 03:00:00 LocalDateTime Time1 = localDateTime.of (2016, 3, 13, 15, 00, 00); getzongtime (time1, zoneid.of ("amerika/new_york")); //The expected result in daylight saving time: 2016-11-06 01:59:59 //I feel like it failed again, it should be 2016-11-06 02:59:59 //In other words, the method before java8 handles the end of daylight saving time at this time is exactly the same, and judges one hour in advance //That is, the end time of daylight saving time is regarded as 2016-11-6 00:59:59, tetapi metode penilaian Java8 benar. Bukankah itu sedikit aneh localdatetime time2 = localDatetime.of (2016, 11, 6, 14, 59, 59); getzongtime (time2, zoneid.of ("amerika/new_york")); // Tidak diharapkan di Daylight Saving Time2016-11-06 02:00:00 LocalDateTime Time3 = localDatetime.of (2016, 11, 6, 15, 00, 00); getzongtime (time3, zoneid.of ("amerika/new_york")); }Jadi saya sekarang ragu apakah hasil ini merupakan masalah perhitungan yang sistematis, atau apakah saya tidak memahami kebiasaan New York?
Tapi saya masih bisa mendapatkan hasil yang saya inginkan, menggunakan 2 metode:
withearlieroffsetAverlap (), withlateroffsetatoverlap ()
Versi 2:
//Get the specified time reference point for the specified time: Default time zone public LocalDateTime getZongTime2(LocalDateTime time,ZoneId dest) {Objects.requireNonNull(dest);return getZongTime2(time, null, dest);}// Version 2 public LocalDateTime getZongTime2(LocalDateTime time,ZoneId src,ZoneId dest) { //The difficulty is how to find the Offset // Zona waktu default digunakan di sini, di Cina, di Amerika Serikat, Amerika Serikat adalah Amerika Serikat, jadi mungkin lebih cocok untuk objek.requirenonnull (DEST); ZonedDatetime z1 = null; if (src == null) {z1 = time.atzone (zonaid.systemdefault ()); } else {z1 = time.atzone (src); } // zonedDateTime z2 = z1.withzonesameInstant (dest); // menangani masalah yang tumpang tindih jam kerja = durasi. z2 = z2.plushours (jam); System.out.println (dest.getId ()+"sesuai dengan zona waktu standar:"+getzonedesc (timezone.gettimezone (dest))); System.out.println ("Target Time Zone"+Dest+"Time"+Z2.Format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); System.out.println ("-------------------"); waktu pengembalian;}Tes: Oke
@Test public void test4 () melempar Exception {// diharapkan tidak berada di Daylight Saving Time2016-03-13 01:59:59 LocalDateTime Time4 = localDateTime.of (2016, 3, 13, 14, 59, 59); getzongtime2 (time4, zoneid.of ("amerika/new_york")); // Diharapkan di Daylight Saving Time2016-03-13 03:00:00 LocalDateTime Time1 = localDateTime.of (2016, 3, 13, 15, 00, 00); getzongtime2 (time1, zoneid.of ("amerika/new_york")); // Diharapkan pada waktu penghematan siang hari 2016-11-06 02:59:59 LocalDatetime Time2 = localDatetime.of (2016, 11, 6, 14, 59, 59); getzongtime2 (time2, zoneid.of ("amerika/new_york")); // Diharapkan bukan pada waktu penghematan siang hari 2016-11-06 02:00:00 LocalDateTime Time3 = localDatetime.of (2016, 11, 6, 15, 00, 00); getzongtime2 (time3, zoneid.of ("amerika/new_york")); }hasil:
Amerika/new_york sesuai dengan zona waktu standar: GMT-5
Waktu zona waktu target Amerika/new_york 2016-03-13 01:59:59
----------------------
Amerika/new_york sesuai dengan zona waktu standar: GMT-5
Waktu zona waktu target Amerika/new_york 2016-03-13 03:00:00
----------------------
Amerika/new_york sesuai dengan zona waktu standar: GMT-5
Waktu zona waktu target Amerika/new_york 2016-11-06 02:59:59
----------------------
Amerika/new_york sesuai dengan zona waktu standar: GMT-5
Waktu zona waktu target Amerika/new_york 2016-11-06 02:00:00
----------------------
Masalah dan solusi di atas untuk mengonversi waktu penghematan siang hari berdasarkan zona waktu java adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.