1. ความรู้การเตรียมการ
1. เวลาออมแสงของอเมริกา/new_york มีดังนี้: ด้านซ้ายไม่ใช่ด้านขวาคือ
2016-3-13, 02:00:00 ถึง 2016-11-6, 02:00:00 น.
2017-3-12, 02:00:00 น. ถึง 2017-11-5, 02:00:00 น.
2. รหัสเขตเวลาสามตัวอักษร
สำหรับความเข้ากันได้กับ JDK 1.1.x จะรองรับ ID โซนเวลาสามตัวอักษร (เช่น "PST", "CTT", "AST")
อย่างไรก็ตามการใช้งานของพวกเขาจะถูกยกเลิกเนื่องจากตัวย่อเดียวกันมักจะใช้ในหลายเขตเวลา
ตัวอย่างเช่น CST: มันมี 4 ความหมาย, สหรัฐอเมริกา, ออสเตรเลีย, จีน, เวลาคิวบา
3. มาตรฐาน
GMT: เวลาเฉลี่ยสีเขียวเวลามาตรฐานกรีนนิชใช้เป็นเวลาอ้างอิงมาตรฐาน GMT+12-> GMT-12 ก่อนปี 1960
ช่วงของ Java8 คือ GMT+18-> GMT-18
UTC: การประสานงานเวลาสากลเวลาประสานงานเวลาโลกซึ่งแม่นยำกว่า GMT และกลายเป็นมาตรฐานใหม่เมื่อวันที่ 1 มกราคม 1972; UTC, UTC+1, UTC+2 ... UTC+12, UTC-12 ... UTC-1
Range ของ Java8 Range UTC-18-> UTC+18
DST: เวลาประหยัดเวลากลางวันหมายถึงเวลาที่นาฬิกาเปิดขึ้นเป็นเวลาหนึ่งชั่วโมงในฤดูร้อนเพื่อใช้แสงแดดก่อนหน้านี้ มันเรียกว่าฤดูร้อนเวลาในสหราชอาณาจักร;
ปัจจุบันกว่า 110 ประเทศใช้เวลาประหยัดเวลากลางวัน
ในประเทศจีนมีการดำเนินการเป็นเวลา 6 ปีตั้งแต่ปี 2529 ถึง 2535 และถูกยกเลิกหลังจากนั้น เหตุผลมีดังนี้:
1. จีนมีช่วงกว้างในทิศทางตะวันออกและตะวันตกและใช้เขต East Eighth ที่เป็นเอกภาพซึ่งไม่สอดคล้องกับตะวันออกและตะวันตกโดยใช้เวลาออมแสง
2. ในพื้นที่ละติจูดสูงช่วงเวลาของกลางวันและกลางคืนเปลี่ยนไปอย่างมากในฤดูหนาวและฤดูร้อน มันไม่ได้มีความหมายมากนัก
4. สามารถใช้เพื่อระบุว่าเขตที่แปดตะวันออกคือ: GMT+8 หรือ ETC/GMT-8 (ในทางกลับกันทำไมทำไมผู้พัฒนา PHP เชื่อว่าเขตที่แปดตะวันออกนั้นเร็วกว่าเวลามาตรฐาน 8 ชั่วโมงและควรถูกลบออก 8 ชั่วโมง
5. วิธีเป็นตัวแทนเขตเวลาของจีน
GMT+8
UTC+8
เอเชีย/Harbin Harbin // China Standard Time
Asia/Chongqing Chongqing // China Standard Time
เอเชีย/Chungking Chongqing // China Standard Time
เอเชีย/urumqi urumqi // China Standard Time
เอเชีย/เซี่ยงไฮ้เซี่ยงไฮ้ (East 8 District) // China Standard Time
PRC
เอเชีย/มาเก๊ามาเก๊า // เวลามาตรฐานจีน
ฮ่องกงฮ่องกง // เวลาฮ่องกงสอดคล้องกับเวลามาตรฐานจีน
เอเชีย/ฮ่องกงฮ่องกง
เอเชีย/ไทเปไทเป (ไต้หวัน) // China Standard Time Singapore เหมือนกับเวลาของจีน
เอเชีย/สิงคโปร์
สิงคโปร์
6. การเป็นตัวแทนของโซนเวลามาตรฐาน
UTC
UTC+0
UTC-0
GMT GMT
GMT0 GMT
ฯลฯ/gmt gmt
ฯลฯ/gmt+0 gmt
ฯลฯ/GMT-0 GMT
ETC/GMT0 GMT0 GMTS เวลามาตรฐานหมายเหตุ: GMT+XX (-XX) นั้นครอบคลุมมากและสามารถระบุการเป็นตัวแทนของเวลาต่าง ๆ โดยอัตโนมัติ
2. การแปลงโซนเวลา
สภาพแวดล้อม: ก่อน java8
1. แปลงเวลาปัจจุบันเป็นจอแสดงผลโซนเวลาที่ระบุ
@Test Public Void Test () พ่นข้อยกเว้น {วันที่ a = วันที่ใหม่ (); SimpledateFormat SF = ใหม่ SimpleDateFormat ("YYYY-MM-DD HH: MM: SS"); sf.settimezone (timezone.gettimezone ("America/new_york")); // แปลงเขตเวลาจีนเป็นเขตเวลานิวยอร์กของสหรัฐอเมริกา System.out.println (sf.format (a)); -2. เวลาที่ระบุจะถูกแปลงเป็นจอแสดงผลโซนเวลาที่ระบุ
ฉันสามารถแปลงถูกต้องได้หรือไม่? ดูเหมือนว่าจะมีข้อผิดพลาดฉันดูการใช้งานออนไลน์
ฉันรู้สึกว่ามีปัญหาเล็กน้อยกับเวลาประหยัดเวลากลางวัน
// วิธีการใช้งาน 1: เวลาประหยัดเวลากลางวันไม่ได้รับการพิจารณา @Test โมฆะสาธารณะ test2 () โยนข้อยกเว้น { /วันที่ dateTime = ใหม่ simpledateFormat ("yyyy-mm-dd hh: mm: ss"). parse ("2016-11-6 14:00:00"); วันที่ dateTime = ใหม่ simpledateFormat ("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 ("America/new_york"); // GMT-5 // การชดเชยเขตเวลาที่นี่ได้รับการแก้ไขไม่มีเวลาประหยัดเวลากลางวันข้อผิดพลาด chinesemills ยาว = datetime.getTime () + York.getRawoffset ()-zhong.getRawoffset (); วันที่ = วันที่ใหม่ (chinesemills); System.out.println (ใหม่ SimpledateFormat ("yyyy-mm-dd hh: mm: ss"). รูปแบบ (วันที่)); - // วิธีการใช้งาน 2 คุณอาจจำได้ว่าการใช้ Calendar.dst_offset ของคลาสปฏิทิน // มันยังไม่ถูกต้องในการปฏิทิน. dst_offset นี่เป็นความตาย @testpublic void test3 () โยนข้อยกเว้น {// date time = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss") = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"). parse ("2016-11-6 1:00:00"); // เวลาวันที่ = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss") HH: MM: SS "). parse (" 2016-11-6 0:59:00 "); // เวลาวันที่ = ใหม่ SimpledateFormat (" YYYY-MM-DD HH: MM: SS "). PARSE (" 2016-11-6 1:59:59 "); HH: MM: SS "). Parse (" 2016-11-6 3:00:00 "); // 1. ได้รับเวลาท้องถิ่น: ปฏิทิน Cal = ปฏิทิน GetInstance (); cal.Settime (เวลา); cal.Settimezone cal.get (calendar.zone_offset)/(1,000*60*60); // 3. รับความแตกต่างของเวลาประหยัดเวลากลางวัน: สิ่งนี้ได้รับการแก้ไขไม่ได้ขึ้นอยู่กับการตัดสินของเวลาแบบไดนามิก ตราบใดที่มีเวลาประหยัดเวลากลางวันในเขตเวลามันคือ 1int dstoffset = cal.get (calendar.dst_offset)/(1,000*60*60); system.out.println (zoneoffset); system.out.println (dstoffset); // 4 -(zoneOffset + dstoffset)); cal.Add (calendar.hour, -(zoneOffset + dstoffset)); วันที่ time2 = cal.getTime (); system.out.println (ใหม่ simpledateFormat ("yyyy -mm -dd hh: mm: ss") // วิธีการใช้งาน 3 การเตรียมการ // ไม่ได้บอกว่า Java จะจัดการเวลาประหยัดเวลากลางวันโดยอัตโนมัติสำหรับเราหรือไม่? // ก่อนอื่นให้มีการทดสอบง่ายๆเพื่อดูว่าวิธีการตัดสินเวลากลางวันประหยัดเวลาถูกต้องหรือไม่และคุณสามารถอนุมานได้ว่าการประมวลผลอัตโนมัติของ Java นั้นถูกต้องหรือไม่ // เป็นที่ทราบกันดีว่าในปี 2016: เวลาประหยัดเวลาในอเมริกา Point SimpledateFormat SF = ใหม่ SimpleDateFormat ("YYYY-MM-DD HH: MM: SS"); sf.settimezone (timezone.gettimezone ("gmt+0")); // วันที่ dateTime = sf.parse ("2016-11-6 5:59:59"); วันที่ d1 = sf.parse ("2016-03-13 6:59:59"); // วันที่เท็จ d2 = sf.parse ("2016-03-13 7:00:00"); // วันที่จริง d3 = sf.parse ("2016-11-6 6:59:59"); // ฉันพบว่าไม่มีปัญหาในการตัดสินการเริ่มต้นของเวลาประหยัดเวลาในเวลากลางวัน แต่สำหรับเวลาสุดท้ายของเวลาประหยัดเวลาในเวลากลางวันเพื่อให้แม่นยำฉันได้ตัดสินมันล่วงหน้าหนึ่งชั่วโมง // ดูการตรวจสอบด้านล่างดังนั้นทำไมถึงหนึ่งชั่วโมงล่วงหน้า? วิธีแก้ปัญหา? ในปัจจุบันฉันสามารถใช้ Java8 d3 = sf.parse ("2016-11-6 5:59:59"); // true d4 = sf.parse ("2016-11-6 6:00:00"); // gmt-5 system.out.println ("เวลาเป้าหมายใช้เวลาประหยัดเวลาในเวลากลางวัน:"+isdaylight (York, D1)); System.out.println ("โซนเวลาเป้าหมายใช้เวลาประหยัดเวลากลางวัน:"+isdaylight (York, D2)); System.out.println ("โซนเวลาเป้าหมายใช้เวลาประหยัดเวลากลางวัน:"+isdaylight (York, D3)); System.out.println ("โซนเวลาเป้าหมายใช้เวลาประหยัดเวลากลางวัน:"+isdaylight (York, D4)); } // ผู้พิพากษาว่าบูลีนส่วนตัว isdaylight (เขตเวลาเขตเวลาวันที่) {return zone.usedaylighttime () && zone.indaylighttime (วันที่); - // วิธีการใช้งาน 3 // ผ่านการตรวจสอบข้างต้นเรารู้ว่าการตัดสินของระบบเป็นปัญหา โดยการตั้งค่าเขตเวลาโปรแกรมจะจัดการเวลาประหยัดเวลากลางวันโดยอัตโนมัติ อย่างน้อยฉันก็ไม่เข้าใจว่าทำไม @testpublic void test5 () โยนข้อยกเว้น {// 13 ชั่วโมงห่างกันจีน + 8 New York-5 Changezone ("2016-3-13 14:59:59", "PRC", "America/New_york", "Yyyy-MM-DD HH: MM: SS" 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 " HH: MM: SS "); // 2016-11-06 01:59:59 // ผลลัพธ์นี้ผิดมันควรจะเป็น 02:00:00 CHANGEZONE (" 2016-11-6 14:00:00 "," PRC "," America/New_York " การใช้งานมีดังนี้: // ความคิดคือโมฆะคงที่สาธารณะคงที่ Changezone (เวลาสตริง, สตริง srcid, สตริง destid, รูปแบบสตริง) พ่น parseexception {// ตั้งค่าโซนเวลาเขตเวลาเริ่มต้น = zone zone.gettimezone (SRCID); Timezone.SetDefault (โซน); วันที่ = ใหม่ simpledateFormat (รูปแบบ) .parse (เวลา); // ตั้งค่าเขตเวลาเป้าหมายเขตเวลา destzone = timezone.gettimezone (destid); SimpledateFormat SDF = ใหม่ SimpleDateFormat (รูปแบบ); // ตั้งค่าโซนเวลาที่จะจัดรูปแบบ sdf.settimezone (destzone); String Changtime = SDF.Format (วันที่); // รับโซนเวลาเป้าหมาย OUT.println ("หลังจากแก้ไขเขตเวลา" + destzone.getId () + "เวลา:" + changtime); -สรุป: ผลลัพธ์ที่ได้จากวิธีการใช้งานสามวิธีข้างต้นนั้นค่อนข้างเป็นปัญหาสำหรับเวลาออมแสงในเวลากลางวัน
สามการใช้งาน Java8
1. มาดูการเปลี่ยนแปลงเขตเวลาใน Java 8 ก่อน
// โซนเวลาที่มีอยู่ของ JDK8 @TestPublic เป็นโมฆะ testName1 () โยนข้อยกเว้น {// jdk8 ของโซนเวลาทั้งหมดที่ตั้งค่า <string> ids = zoneid.getAvailablezoneids (); string [] id1 = ids.toarray (สตริงใหม่ ",]"); System.out.println (ids.size ()); // 28 โซนเวลาที่หายไปก่อนสตริงของ JDK8 [] ID2 = Timezone.GetAvailableIds (); System.out.println (id2.length); // 623 // ค้นหาสำหรับ (string id: id2) {if (! idss.contains (id+",")) {system.out.print (id+",");}} // บทสรุป: โซนเวลาทั้งหมดใน jdk8 ได้ถูกลบไปแล้ว AGT, ART, AST, BET, BST, CAT, CNT, CST, CTT, Eat, ECT, IET, IST, JST, MIT, NET, NST, PLT, PNT, PRT, PST, SST, VST, // แต่ชื่อสั้น ๆ เหล่านี้ยังคงมีอยู่ localDateTime.ofinstant (ทันที. now (), zoneid.of (zoneid.short_ids.get ("pst")))); system.out.println ("/ndate =" + วันที่);}2. วิธีเพิ่มข้อมูลโซนเวลาหรือแปลง
// localDate, localDateTime, เพิ่มข้อมูลโซนเวลาทันที @TestPublic Void TestName3 () {วันที่ localDate = localDate.now (); // localDate เพิ่มข้อมูลโซนเวลา // วิธี 1ZONEDDATETIME โซน = วันที่ atStartOfday Date.atstartofday (zoneid.systemdefault ()); System.out.println (Zone); // วิธีการ 2 localDate Date2 = localdate.now (zoneid.of ("gmt+0")); system.out.println (date2); system.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - zoneime3 = localDateTime.now (นาฬิการะบบ (zoneid.of ("gmt+0"))); // วิธีการ 4ZONEDDATETIME ZONENETIME4 = ZONEDDATETIME.OF (เวลา, zoneid.of ("gmt+0")); System.out.println (zonetime3); // เปลี่ยน system.out.println (zonetime4); // เปลี่ยน System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -3. วิธีรับเวลาที่กำหนดของเวลาปัจจุบัน (ละเว้นการทดสอบ)
// รับโซนเวลาที่ระบุของเวลาปัจจุบันจุดอ้างอิง: 0 เขตเวลาสาธารณะ localDateTime getCurrentZonetime (zoneid dest) {objects.requirenonnull (dest); localDateTime time2 = localDateTime.now (clock.system (dest)); String ZonEdesc = getZonedesc (Timezone.getTimeZone (dest)); System.out.println (dest.getId ()+"สอดคล้องกับเขตเวลามาตรฐาน:"+zonedesc); System.out.println ("เขตเวลาเป้าหมาย"+dest+"เวลา"+time2.format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); กลับ time2;} // รับโซนเวลามาตรฐาน, วิธีการ 1 // วิธีการก่อน JDK8, ใช้โซนไทม์โซนส่วนตัวสตริงคงที่ getzonedesc (เขตเวลา destzone) {objects.requirenonnull (destzone); int offset = destzone.getRawoffset () / (1,000 * 60 * 60); if (Offset <= 0) {return "gmt"+string.valueof (ออฟเซ็ต); } else {return "gmt +" + string.valueof (ชดเชย); - // วิธี java8, วิธีที่ 2, ใช้ zonerules // ได้รับการชดเชยมาตรฐานของโซนเวลา, zonerules.getStandardoffset // รับออฟเซ็ตจริงของเขตเวลา (ออฟเซ็ตที่ได้รับจะเปลี่ยนไปตามเวลาประหยัดเวลากลางวัน) // Rule.getStandardOffset (ZonedDateTime.now (dest) .toinstant ()). getId (); String S = Standardoffset.split (":") [0]; int offset = integer.parseint (s); // วิธีการส่งคืน 1: ด้วยชั่วโมงและนาที // ส่งคืน "gmt"+standardoffset; // วิธีการส่งคืน 2: ด้วยชั่วโมงถ้า (ออฟเซ็ต> 0) {return "gmt+"+ออฟเซ็ต;} else {return "gmt"+ออฟเซ็ต;}}}4. วิธีรับเวลาที่กำหนดของเขตเวลาที่กำหนด
เริ่มใช้ปัญหาโซนเวลาที่เหลืออยู่ด้านบน
ในทำนองเดียวกันให้ดูก่อนว่าวิธีการตัดสินเวลาประหยัดเวลาในเวลากลางวันโดยใช้ Java8 นั้นถูกต้องหรือไม่
// เขียนมือแรกเพื่อตรวจสอบว่าเวลาในสหรัฐอเมริกาอยู่ในช่วงเวลาประหยัดเวลาบูลีนสาธารณะ isdaylighttime (localDateTime a) {objects.requirenonnull (a); LocalDateTime StartDate = A.WithMonth (3) .Tolocaldate (). Attime (2, 0); LocalDateTime startLightday = startDate.with (temporaladjusters.dayofweekinmonth (2, dayofweek.sunday)); // อัปเดตเป็นเดือนพฤศจิกายน localdateme enddate = a.withMonth (11) .tolocaldate () attime (1, 59,59) dayofweek.sunday)) ถ้า (a.isbefore (startlightday) || a.isafter (endlightday)) {system.out.println ("ไม่ได้อยู่ในเวลาประหยัดเวลาประหยัด"+a); return;} system.out.println ("ในเวลาที่ดีกว่า และโซนเวลาบูลีนสาธารณะ isdaylighttime (LocalDateTime A, ZoneID DEST) {ZONEDDATETIME Z1 = A.ATZONE (DEST); // หรือถ่ายโอนวิธีนี้ // zonedDateTime Z2 = ZonedDateTime.of (a, dest); System.out.println (z1.format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); กฎ Zonerules = dest.getRules (); ธงบูลีน = Rules.isdaylightsavings (z1.toinstant ()); System.out.println (FLAG); Return Flag; -// ทดสอบและพบว่าวิธีการประหยัดเวลากลางวันของ Java8 นั้นถูกต้องอย่างสมบูรณ์
// เป็นที่ทราบกันดีว่าปี 2016: เวลาประหยัดเวลากลางวันของอเมริกา/New_york คือ: 2016-3-13 02:00:00 น. ถึง 2016-11-06 01:59:59 // (วันอาทิตย์ที่สองของเดือนมีนาคมและวันอาทิตย์แรกของเดือนพฤศจิกายน) @testpublic void testname () 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, 2, 2, 2, 2, 2, 0,0); // isdaylighttime (a2); // isdaylighttime (a3); // isdaylighttime (a4); // isdaylighttime (a5); system.out.println ("=============================== - - - - - - ;เริ่มดำเนินการ:
เวอร์ชัน 1:
// รับจุดอ้างอิงเวลาที่ระบุสำหรับเวลาที่กำหนด: เขตเวลาเริ่มต้นพื้นที่สาธารณะ localDateTime getzongtime (เวลาท้องถิ่นเวลา, zoneid dest) {objects.requirenonnull (dest); กลับ getzongtime (เวลา, null, dest); - // คุณไม่สามารถลบออกจาก ZonedDateTime ของ 2 เขตเวลาได้เพราะเมื่อคุณระบุเขตเวลาที่นี่เวลานี้เป็นเขตเวลานี้ในพื้นที่สาธารณะท้องถิ่น Getzongtime (เวลาท้องถิ่นเวลา, โซน SRC, โซนท่อน นี่อาจเหมาะสำหรับวัตถุมากขึ้น requirenonnull (dest); ZonedDateTime Z1 = NULL; if (src == null) {z1 = time.atzone (zoneid.systemdefault ()); } else {z1 = time.atzone (src); } // การตอบสนองของเขตเวลาการเปลี่ยนแปลงในเวลา ZonedDateTime Z2 = Z1.WithZonesameInstant (DEST); System.out.println (dest.getId ()+"สอดคล้องกับเขตเวลามาตรฐาน:"+getzonedesc (timezone.gettimezone (dest))); System.out.println ("เขตเวลาเป้าหมาย"+dest+"เวลา"+z2.format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); System.out.println ("-----------------"); เวลากลับ; -การทดสอบมีดังนี้:
@Test โมฆะสาธารณะทดสอบ 6 () โยนข้อยกเว้น {// คาดว่าจะไม่อยู่ในเวลากลางวันประหยัดเวลา 2016-03-13 01:59:59 LocalDateTime Time4 = LocalDateTime.OF (2016, 3, 13, 14, 59, 59); getzongtime (time4, zoneid.of ("America/new_york")); // คาดว่าจะอยู่ในเวลากลางวันที่ประหยัดเวลา 2016-03-13 03:00:00 LocalDateTime Time1 = LocalDateTime.OF (2016, 3, 13, 15, 00, 00); getzongtime (time1, zoneid.of ("America/new_york")); // ผลลัพธ์ที่คาดหวังในเวลาประหยัดเวลา: 2016-11-06 01:59:59 // ฉันรู้สึกว่ามันล้มเหลวอีกครั้งมันควรจะเป็น 2016-11-06 02:59:59 // ในคำอื่น ๆ 00:59:59 แต่วิธีการตัดสินของ Java8 นั้นถูกต้อง มันไม่แปลกในท้องถิ่นที่แปลกประหลาด time2 = localDateTime.OF (2016, 11, 6, 14, 59, 59); getzongtime (time2, zoneid.of ("America/new_york")); // ไม่คาดว่าจะอยู่ในเวลากลางวันที่ประหยัดเวลา 2016-11-06 02:00:00 LocalDateTime Time3 = LocalDateTime.OF (2016, 11, 6, 15, 00, 00); getzongtime (time3, zoneid.of ("America/new_york")); -ดังนั้นตอนนี้ฉันสงสัยว่าผลลัพธ์นี้เป็นปัญหาการคำนวณอย่างเป็นระบบหรือไม่หรือฉันไม่เข้าใจศุลกากรนิวยอร์ก?
แต่ฉันยังสามารถรับผลลัพธ์ที่ฉันต้องการใช้ 2 วิธี:
withearlieroffsetAtoverlap (), withlateroffsetatoverlap ()
เวอร์ชัน 2:
// รับจุดอ้างอิงเวลาที่ระบุสำหรับเวลาที่กำหนด: เขตเวลาเริ่มต้นพื้นที่สาธารณะ localDateTime getzongtime2 (เวลาท้องถิ่น, zoneid dest) {objects.requirenonnull (dest); กลับ getzongtime2 (เวลา, null, dest); ออฟเซ็ต // เขตเวลาเริ่มต้นถูกนำมาใช้ที่นี่ในประเทศจีนในสหรัฐอเมริกาสหรัฐอเมริกาเป็นสหรัฐอเมริกาดังนั้นจึงอาจเหมาะสำหรับวัตถุมากขึ้น ZonedDateTime Z1 = NULL; if (src == null) {z1 = time.atzone (zoneid.systemdefault ()); } else {z1 = time.atzone (src); } // ZONEDDATETIME Z2 = Z1.WithZONEMAMEINSTANT (DEST); // จัดการปัญหาที่ทับซ้อนกันชั่วโมงเวลา = ระยะเวลาระหว่าง (z2.withearLieroffsetAtoVerlap (), z2.withlateroffsetAtoverlap ()). tohours (); z2 = z2.plushours (ชั่วโมง); System.out.println (dest.getId ()+"สอดคล้องกับเขตเวลามาตรฐาน:"+getzonedesc (timezone.gettimezone (dest))); System.out.println ("เขตเวลาเป้าหมาย"+dest+"เวลา"+z2.format (datetimeformatter.ofpattern ("yyyy-mm-dd hh: mm: ss")))); System.out.println ("-------------------"); เวลากลับ;}ทดสอบ: ตกลง
@Test โมฆะสาธารณะ test4 () โยนข้อยกเว้น {// คาดว่าจะไม่อยู่ในเวลากลางวันประหยัดเวลา 2016-03-13 01:59:59 LocalDateTime Time4 = LocalDateTime.OF (2016, 3, 13, 14, 59, 59); getzongtime2 (time4, zoneid.of ("อเมริกา/new_york")); // คาดว่าจะอยู่ในเวลากลางวันที่ประหยัดเวลา 2016-03-13 03:00:00 LocalDateTime Time1 = LocalDateTime.OF (2016, 3, 13, 15, 00, 00); getzongtime2 (time1, zoneid.of ("America/new_york")); // คาดว่าจะอยู่ในช่วงเวลาออมแสง 2016-11-06 02:59:59 LocalDateTime Time2 = LocalDateTime.OF (2016, 11, 6, 14, 59, 59); getzongtime2 (time2, zoneid.of ("America/new_york")); // คาดว่าจะไม่ได้อยู่ในเวลาประหยัดเวลา 2016-11-06 02:00:00 LocalDateTime Time3 = LocalDateTime.OF (2016, 11, 6, 15, 00, 00); getzongtime2 (time3, zoneid.of ("America/new_york")); -ผลลัพธ์:
America/new_york สอดคล้องกับเขตเวลามาตรฐาน: GMT-5
เวลาของเขตเวลาเป้าหมายอเมริกา/new_york 2016-03-13 01:59:59
-
America/new_york สอดคล้องกับเขตเวลามาตรฐาน: GMT-5
เวลาของเขตเวลาเป้าหมายอเมริกา/new_york 2016-03-13 03:00:00
-
America/new_york สอดคล้องกับเขตเวลามาตรฐาน: GMT-5
เวลาของเขตเวลาเป้าหมายอเมริกา/new_york 2016-11-06 02:59:59
-
America/new_york สอดคล้องกับเขตเวลามาตรฐาน: GMT-5
เวลาของเขตเวลาเป้าหมายอเมริกา/new_york 2016-11-06 02:00:00
-
ปัญหาและวิธีแก้ปัญหาข้างต้นในการแปลงเวลาประหยัดเวลาตามเวลาตามเขตเวลา Java คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น