අනෙක් අය පැහැදිලි කළ පරිදි, එහි කාලය අත්හිටුවීමක් තිබේ. දී කළ හැකි කාල කලාප ඕෆ්සෙට් දෙකක් 1927-12-31 23:54:08
ඇත Asia/Shanghai
, නමුත් එක් ඕෆ්සෙට් එකක් පමණි 1927-12-31 23:54:07
. එබැවින්, කුමන ඕෆ්සෙට් භාවිතා කරන්නේද යන්න මත, තත්පරයක වෙනසක් හෝ මිනිත්තු 5 යි තත්පර 53 ක වෙනසක් ඇත.
අප භාවිතා කරන සුපුරුදු පැයක දිවා ආලෝකය (ගිම්හාන කාලය) වෙනුවට මෙම සුළු ඕෆ්සෙට් මාරුව, ගැටළුව මඳක් අපැහැදිලි කරයි.
කාල කලාප දත්ත ගබඩාවේ 2013a යාවත්කාලීනය තත්පර කිහිපයකට පෙර මෙම අත්හිටුවීම ගෙන ගිය නමුත් එහි බලපෑම තවමත් නිරීක්ෂණය කළ හැකි බව සලකන්න.
java.time
ජාවා 8 හි ඇති නව පැකේජය මෙය වඩාත් පැහැදිලිව බැලීමට ඉඩ දී එය හැසිරවීමට මෙවලම් සපයයි. ලබා දී ඇත්තේ:
DateTimeFormatterBuilder dtfb = new DateTimeFormatterBuilder();
dtfb.append(DateTimeFormatter.ISO_LOCAL_DATE);
dtfb.appendLiteral(' ');
dtfb.append(DateTimeFormatter.ISO_LOCAL_TIME);
DateTimeFormatter dtf = dtfb.toFormatter();
ZoneId shanghai = ZoneId.of("Asia/Shanghai");
String str3 = "1927-12-31 23:54:07";
String str4 = "1927-12-31 23:54:08";
ZonedDateTime zdt3 = LocalDateTime.parse(str3, dtf).atZone(shanghai);
ZonedDateTime zdt4 = LocalDateTime.parse(str4, dtf).atZone(shanghai);
Duration durationAtEarlierOffset = Duration.between(zdt3.withEarlierOffsetAtOverlap(), zdt4.withEarlierOffsetAtOverlap());
Duration durationAtLaterOffset = Duration.between(zdt3.withLaterOffsetAtOverlap(), zdt4.withLaterOffsetAtOverlap());
එවිට durationAtEarlierOffset
තත්පරයක් වන අතර durationAtLaterOffset
මිනිත්තු පහක් තත්පර 53 ක් වනු ඇත.
එසේම, මෙම ඕෆ්සෙට් දෙක සමාන වේ:
// Both have offsets +08:05:52
ZoneOffset zo3Earlier = zdt3.withEarlierOffsetAtOverlap().getOffset();
ZoneOffset zo3Later = zdt3.withLaterOffsetAtOverlap().getOffset();
නමුත් මේ දෙක වෙනස් ය:
// +08:05:52
ZoneOffset zo4Earlier = zdt4.withEarlierOffsetAtOverlap().getOffset();
// +08:00
ZoneOffset zo4Later = zdt4.withLaterOffsetAtOverlap().getOffset();
ඔබ සංසන්දනය එම ප්රශ්නය බලන්න පුළුවන් 1927-12-31 23:59:59
සමග 1928-01-01 00:00:00
මේ අවස්ථාවේ දී, එය මීට පෙර තවදුරටත් අපසරනය නිෂ්පාදනය, සහ එය කළ හැකි ආරම්භක දෙකක් ඇති බව මීට පෙර දිනය බව අසමමිතික, නමුත්,.
මේ සඳහා ප්රවේශ විය හැකි තවත් ක්රමයක් නම් සංක්රාන්තියක් සිදුවන්නේ දැයි පරීක්ෂා කිරීමයි. අපට මෙය මේ ආකාරයෙන් කළ හැකිය:
// Null
ZoneOffsetTransition zot3 = shanghai.getRules().getTransition(ld3.toLocalDateTime);
// An overlap transition
ZoneOffsetTransition zot4 = shanghai.getRules().getTransition(ld3.toLocalDateTime);
භාවිතා කරමින් - ඔබ සංක්රමණය පවතින බව නම් දිනය / වේලාව හෝ දිනය / වේලාව කලාපයක් id සඳහා වලංගු නොවේ එහිදී පරතරය සඳහා හිලව් වලංගු එකක් වඩා වැඩියෙන් අවස්ථාවකට එකක් උඩ එකක් ද යන්න පරීක්ෂා කර ගත හැක isOverlap()
හා isGap()
මත ක්රම zot4
.
ජාවා 8 පුළුල් ලෙස ලබා ගත හැකි වූ විට හෝ ජේඑස්ආර් 310 බැක්පෝට් භාවිතා කරන ජාවා 7 භාවිතා කරන්නන්ට මෙය මෙවැනි ගැටලුවක් විසඳීමට මිනිසුන්ට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි.