(1927 දී) මෙම අවස්ථා දෙක අඩු කිරීමෙන් අමුතු ප්‍රති result ලයක් ලැබෙන්නේ ඇයි?


6828

මම පහත දැක්වෙන වැඩසටහන ක්‍රියාත්මක කරන්නේ නම්, තත්පර 1 ක කාල පරාසයක් සඳහන් කර දින නූල් දෙකක් විග්‍රහ කර ඒවා සංසන්දනය කරන්නේ නම්:

public static void main(String[] args) throws ParseException {
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    String str3 = "1927-12-31 23:54:07";  
    String str4 = "1927-12-31 23:54:08";  
    Date sDt3 = sf.parse(str3);  
    Date sDt4 = sf.parse(str4);  
    long ld3 = sDt3.getTime() /1000;  
    long ld4 = sDt4.getTime() /1000;
    System.out.println(ld4-ld3);
}

ප්‍රතිදානය:

353 යි

ඇයි ld4-ld3නෑ 1(මම ද ටයිම්ස් එක්-දෙවන වෙනස බලාපොරොත්තු වෙන ලෙස), නමුත් 353?

තත්පර 1 කට පසුව මම දින වෙනස් කළහොත්:

String str3 = "1927-12-31 23:54:08";  
String str4 = "1927-12-31 23:54:09";  

එවිට ld4-ld3වනු ඇත 1.


ජාවා අනුවාදය:

java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Dynamic Code Evolution Client VM (build 0.2-b02-internal, 19.0-b04-internal, mixed mode)

Timezone(`TimeZone.getDefault()`):

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
offset=28800000,dstSavings=0,
useDaylight=false,
transitions=19,
lastRule=null]

Locale(Locale.getDefault()): zh_CN

23
මෙය ස්ථානීය ගැටලුවක් විය හැකිය.
Thorbj Rrn Ravn Andersen

72
සැබෑ පිළිතුර නම්, සෑම විටම, යුනික්ස් යුගය මෙන්, බිට් 64 නිඛිල නිරූපණයකින් (අත්සන් කර ඇත, ඔබට යුගයට පෙර මුද්දරවලට ඉඩ දීමට අවශ්‍ය නම්) ල ging ු-සටහන් සඳහා යුගයක සිට සෑම විටම තත්පර භාවිතා කරන්න. ඕනෑම තාත්වික කාල පද්ධතියකට අධික පැය හෝ දිවා ආලෝකය වැනි රේඛීය නොවන, ඒකාකාරී නොවන හැසිරීම් ඇත.
ෆිල් එච්

22
Lol. ඔවුන් එය 2011 දී jdk6 සඳහා සවි කර ඇත. ඉන් වසර දෙකකට පසුව, එය jdk7 හි ද සවි කළ යුතු බව ඔවුන් සොයා ගත්හ .... 7u25 වන විට ස්ථාවර කර ඇත, ඇත්ත වශයෙන්ම, නිකුත් කිරීමේ සටහනේ කිසිදු ඉඟියක් මට හමු නොවීය. සමහර විට මම කල්පනා කරන්නේ ඔරකල් කොපමණ දෝෂ නිවැරදි කර ඇත්ද යන්න සහ PR හේතු නිසා කිසිවෙකුට ඒ ගැන නොකියයි.
user1050755

8
මේ වගේ දේවල් ගැන හොඳ වීඩියෝවක්: youtube.com/watch?v=-5wpm-gesOY
Thorbjørn Ravn Andersen

4
HPhilH හොඳයි, තවමත් පිම්ම තත්පර ගණනක් පවතිනු ඇත. එබැවින් එය පවා ක්රියා නොකරයි.
12431234123412341234123

Answers:


10876

එය දෙසැම්බර් 31 වන දින ෂැංහයි හි කාල කලාප වෙනස් කිරීමකි.

1927 ෂැංහයි හි විස්තර සඳහා මෙම පිටුව බලන්න . මූලික වශයෙන් 1927 අවසානයේ මධ්‍යම රාත්‍රියේදී ඔරලෝසු විනාඩි 5 යි තත්පර 52 ක් පසුපසට ගියේය. එබැවින් "1927-12-31 23:54:08" ඇත්ත වශයෙන්ම දෙවරක් සිදු වූ අතර, ජාවා එය එම දේශීය දිනය / වේලාව සඳහා පසුකාලීනව ක්ෂණිකව විග්‍රහ කරන බවක් පෙනේ - එබැවින් වෙනස.

කාල කලාපවල බොහෝ විට අමුතු හා අපූරු ලෝකයේ තවත් කථාංගයක් පමණි.

සංස්කරණය කරන්න: මාධ්‍යය නවත්වන්න! ඉතිහාසය වෙනස් වේ ...

TZDB හි 2013a අනුවාදය සමඟ නැවත ගොඩනඟන්නේ නම් මුල් ප්‍රශ්නය තවදුරටත් එකම හැසිරීමක් නොපෙන්වයි . 2013a දී, ප්‍රති result ලය තත්පර 358 ක් වන අතර සංක්‍රාන්ති කාලය 23:54:03 වෙනුවට 23:54:03 වේ.

මම මෙය දුටුවේ නෝඩා ටයිම් හි ඒකක පරීක්ෂණ ස්වරූපයෙන් මේ වගේ ප්‍රශ්න එකතු කරන නිසා පමණයි ... පරීක්ෂණය දැන් වෙනස් කර ඇත, නමුත් එය පෙන්වීමට යයි - historical තිහාසික දත්ත පවා ආරක්ෂිත නොවේ.

සංස්කරණය කරන්න: ඉතිහාසය නැවත වෙනස් වී ඇත ...

TZDB 2014f හි, වෙනස් වීමේ කාලය 1900-12-31 දක්වා වෙනස් වී ඇති අතර එය දැන් තත්පර 343 ක වෙනසක් පමණි (එබැවින් මා අදහස් කරන දේ ඔබ දුටුවහොත් තත්පර 344 අතර කාලය tහා කාලය t+1).

සංස්කරණය කරන්න: 1900 දී සංක්‍රාන්තියක් පිළිබඳ ප්‍රශ්නයකට පිළිතුරු සැපයීම සඳහා ... ජාවා කාල කලාපය ක්‍රියාත්මක කිරීම සෑම කාල කලාපයක්ම සලකන්නේ 1900 යූටීසී ආරම්භයට පෙර ඕනෑම මොහොතක ඔවුන්ගේ සම්මත වේලාවට අනුව ය:

import java.util.TimeZone;

public class Test {
    public static void main(String[] args) throws Exception {
        long startOf1900Utc = -2208988800000L;
        for (String id : TimeZone.getAvailableIDs()) {
            TimeZone zone = TimeZone.getTimeZone(id);
            if (zone.getRawOffset() != zone.getOffset(startOf1900Utc - 1)) {
                System.out.println(id);
            }
        }
    }
}

ඉහත කේතය මගේ වින්ඩෝස් යන්ත්‍රයේ ප්‍රතිදානයක් නිපදවන්නේ නැත. එබැවින් 1900 ආරම්භයේදී එහි සම්මත එක හැර වෙනත් ඕෆ්සෙට් ඇති ඕනෑම කාල කලාපයක් එය සංක්‍රාන්තියක් ලෙස ගණන් ගනු ඇත. TZDB සතුව ඊට වඩා කලින් දත්ත කිහිපයක් ඇත, සහ "ස්ථාවර" සම්මත වේලාවක් පිළිබඳ කිසිදු අදහසක් මත රඳා නොපවතී (එයයිgetRawOffset වලංගු සංකල්පයක් යැයි උපකල්පනය කරයි) එබැවින් වෙනත් පුස්තකාල මෙම කෘතිම සංක්‍රාන්තිය හඳුන්වා දිය යුතු නොවේ.


25
On ජෝන්: කුතුහලයෙන් යුතුව, ඔවුන් එවැනි "අමුතු" කාල පරතරයකින් ඔවුන්ගේ ඔරලෝසු නැවත සකස් කළේ ඇයි? පැයක් වැනි ඕනෑම දෙයක් තාර්කික යැයි පෙනෙන්නට තිබුණි, නමුත් එය විනාඩි 5: 52 ක් වූයේ කෙසේද?
ජොහැන්නස් රුඩොල්ෆ්

63
O ජොහැන්නස්: එය වඩාත් ගෝලීය සාමාන්‍ය කාල කලාපයක් බවට පත් කිරීම සඳහා, මම විශ්වාස කරමි - එහි ප්‍රති off ලයක් ලෙස ඕෆ්සෙට් යූටීසී + 8 වේ. පැරිස් 1911 දී ද එවැනිම දෙයක් කළේය: උදාහරණයක් ලෙස: timeanddate.com/worldclock/clockchange.html?n=195&year=1911
ජෝන් ස්කීට්

34
@ ජෝන් 1752 සැප්තැම්බර් සමඟ ජාවා / .නෙට් සමඟ කටයුතු කරන්නේ දැයි ඔබ දැන ගන්නවාද? මම සෑම විටම යුනික්ස් පද්ධති වල මිනිසුන්ට කැල් 9 1752 පෙන්වීමට ප්‍රිය කළෙමි
මූස් මහතා

30
එහෙනම් ඇයි ෂැංහයි මිනිත්තු 5 ක් ඉබාගාතේ ගියේ?
ඉග්බි ලාර්ජ්මන්

25
Har චාර්ල්ස්: එකල බොහෝ ස්ථානවල සාම්ප්‍රදායික ඕෆ්සෙට් අඩු විය. සමහර රටවල, විවිධ නගරවලට හැකි තරම් භූගෝලීය වශයෙන් නිවැරදි වීමට එකිනෙකට වෙනස් ඕෆ්සෙට් එකක් තිබුණි.
ජෝන් ස්කීට්

1602

ඔබ දේශීය වේලාවක අත්හිටුවීමකට මුහුණ දී ඇත :

දේශීය සම්මත වේලාව ඉරිදාට ළඟා වීමට ආසන්නව තිබියදී, 1928 ජනවාරි 1. 00:00:00 ඔරලෝසු පිටුපසට හරවා පැය 0:05:52 සෙනසුරාදා, 31 සෙනසුරාදා. 1927 දෙසැම්බර්, 23:54:08 ඒ වෙනුවට දේශීය සම්මත වේලාව

මෙය විශේෂයෙන් අමුතු දෙයක් නොවන අතර දේශපාලන හෝ පරිපාලනමය ක්‍රියාමාර්ග හේතුවෙන් කාල කලාප මාරු කිරීම හෝ වෙනස් කිරීම නිසා සෑම විටම සෑම තැනකම බොහෝ විට සිදුවී ඇත.


661

මෙම අමුතුකමෙහි සදාචාරය නම්:

  • හැකි සෑම තැනකම UTC හි දිනයන් සහ වේලාවන් භාවිතා කරන්න.
  • ඔබට UTC හි දිනයක් හෝ වේලාවක් පෙන්විය නොහැකි නම්, සෑම විටම කාල කලාපය දක්වන්න.
  • ඔබට UTC හි ආදාන දිනයක් / වේලාවක් අවශ්‍ය නොවන්නේ නම්, පැහැදිලිව දක්වා ඇති කාල කලාපයක් අවශ්‍ය වේ.

75
UTC බවට පරිවර්තනය කිරීම / ගබඩා කිරීම ඇත්ත වශයෙන්ම විස්තර කර ඇති ගැටලුවට උපකාරී නොවනු ඇත.
unpythonic

23
Ark මාක් මෑන්: ඔබේ වැඩසටහන යූටීසී අභ්‍යන්තරව සෑම තැනකම භාවිතා කරන්නේ නම්, යූඅයි හි පමණක් දේශීය කාල කලාපයකට / සිට පරිවර්තනය කරන්නේ නම්, ඔබ එවැනි අත්හිටුවීම් ගැන තැකීමක් නොකරයි .
රයිඩ්වෝල්ඩ්

66
@ රේඩ්වෝල්ඩ්: ඔබ කැමති බව - 1927-12-31 23:54:08 සඳහා යූටීසී වේලාව කොපමණද? (1927 දී UTC පවා නොතිබූ බව නොසලකා හැරීම). දී සමහර අවස්ථාවක මෙම කාලය සහ දිනය ඔබේ පද්ධතිය තුළට පැමිණෙන අතර, ඔබ එය සිදු කරන්නේ කුමක්ද කියා තීරණය කිරීමට ඇති. යූටීසී හි කාලය යෙදවීමට පරිශීලකයාට පැවසීම ගැටලුව පරිශීලකයා වෙත ගෙන යයි, එය එය ඉවත් නොකරයි.
නික් බැස්ටින්

72
දැන් වසරකට ආසන්න කාලයක් තිස්සේ විශාල යෙදුමක් ප්‍රතිනිර්මාණය කිරීමේ දිනය / වේලාව මත වැඩ කරමින් සිටින බැවින්, මෙම ත්‍රෙඩ් එකේ ක්‍රියාකාරිත්වයේ ප්‍රමාණයෙන් මට සනාථ විය. ඔබ දින දර්ශනය වැනි දෙයක් කරන්නේ නම්, ඔබට යූටීසී "සරලව" ගබඩා කළ නොහැක, මන්ද එය විදහා දැක්විය හැකි කාල කලාපවල අර්ථ දැක්වීම් කාලයත් සමඟ වෙනස් වේ. අපි "පරිශීලක අභිප්‍රාය කාලය" - පරිශීලකයාගේ දේශීය වේලාව සහ ඔවුන්ගේ කාල කලාපය - සහ යූටීසී සෙවීම සහ වර්ග කිරීම සඳහා ගබඩා කර තබන අතර, IANA දත්ත සමුදාය යාවත්කාලීන කරන සෑම අවස්ථාවකම අපි සියලු UTC වේලාවන් නැවත ගණනය කරමු.
taiganaut

366

කාලය වැඩි කරන විට ඔබ නැවත UTC වෙත පරිවර්තනය කර එකතු කිරීම හෝ අඩු කිරීම කළ යුතුය. ප්‍රදර්ශනය සඳහා පමණක් දේශීය වේලාව භාවිතා කරන්න.

මේ ආකාරයෙන් ඔබට පැය හෝ මිනිත්තු දෙවරක් සිදුවන ඕනෑම කාල පරිච්ඡේදයක් හරහා ගමන් කළ හැකිය.

ඔබ UTC බවට පරිවර්තනය කර ඇත්නම්, සෑම තත්පරයක්ම එකතු කර ප්‍රදර්ශනය සඳහා දේශීය වේලාවට පරිවර්තනය කරන්න. ඔබ ප.ව. 11:54:08 හරහා LMT - 11:59:59 pm LMT සහ පසුව 11:54:08 pm CST - 11:59:59 pm CST හරහා යන්න.


309

එක් එක් දිනය පරිවර්තනය කරනවා වෙනුවට, ඔබට පහත කේතය භාවිතා කළ හැකිය:

long difference = (sDt4.getTime() - sDt3.getTime()) / 1000;
System.out.println(difference);

එවිට ප්‍රති result ලය බව බලන්න:

1

72
මම හිතන්නේ එය එසේ නොවේ. ඔබට මගේ පද්ධතිය ඔබේ පද්ධතිය තුළ උත්සාහ කළ හැකිය, එය ප්‍රතිදානය වනු ඇත 1, මන්ද අපට විවිධ ස්ථාන තිබේ.
ෆ්‍රීවින්ඩ්

14
එය සත්‍ය වන්නේ ඔබ පාර්සර් ආදානයේ පෙදෙසි නියම කර නොමැති නිසාය. එය නරක කේතීකරණ විලාසය සහ ජාවා හි විශාල සැලසුම් දෝෂයකි - එහි ආවේනික ප්‍රාදේශීයකරණය. පුද්ගලිකව, මම ජාවා භාවිතා කරන සෑම තැනකම "TZ = UTC LC_ALL = C" තබමි. ඊට අමතරව ඔබ පරිශීලකයෙකු සමඟ directly ජුව මැදිහත් නොවී එය පැහැදිලිවම අවශ්‍ය නම් මිස ක්‍රියාත්මක කිරීමේ සෑම ප්‍රාදේශීය අනුවාදයකින්ම වැළකී සිටිය යුතුය. ප්‍රාදේශීයකරණය ඇතුළුව කිසිදු ගණනය කිරීමකට නොයන්න, සෑම විටම Locale.ROOT සහ UTC කාල කලාප භාවිතා කරන්න.
user1050755

226

මට කණගාටුයි, නමුත් කාලය අත්හිටුවීම ටිකක් ඉදිරියට ගොස් ඇත

JDK 6 මීට වසර දෙකකට පෙර, සහ JDK 7 හි මෑතකදී යාවත්කාලීන 25 හි .

ඉගෙන ගැනීමට ඇති පාඩම: ප්‍රදර්ශනය සඳහා හැරෙන්නට යූටීසී නොවන වේලාවන් ඕනෑම වියදමකින් වළකින්න.


27
මෙය වැරදිය. අත්හිටුවීම දෝෂයක් නොවේ - එය TZDB හි නවතම අනුවාදයක තරමක් වෙනස් දත්ත ඇත. උදාහරණයක් ලෙස, ජාවා 8 සමඟ ඇති මගේ යන්ත්‍රයේ, ඔබ "1927-12-31 23:54:02" සහ "1927-12-31 23:54:03" භාවිතා කිරීම සඳහා කේතය තරමක් වෙනස් කළහොත් ඔබට තවමත් පෙනෙනු ඇත අත්හිටුවීම - නමුත් දැන් තත්පර 358 වෙනුවට 353 වෙනුවට. TZDB හි වඩාත් මෑත සංස්කරණවල තවත් වෙනසක් ඇත - විස්තර සඳහා මගේ පිළිතුර බලන්න. මෙහි සැබෑ දෝෂයක් නොමැත, දිනය / වේලාව පෙළ අගයන් විග්‍රහ කරන්නේ කෙසේද යන්න පිළිබඳ නිර්මාණ තීරණයක් පමණි.
ජෝන් ස්කීට්

6
සැබෑ ගැටළුව නම් දේශීය හා විශ්වීය කාලය (දෙපැත්තටම) අතර පරිවර්තනය 100% විශ්වාසදායක විය නොහැකි බව ක්‍රමලේඛකයින් තේරුම් නොගැනීමයි. පැරණි කාලරාමු සඳහා, දේශීය වේලාව කුමක්ද යන්න පිළිබඳ අප සතුව ඇති දත්ත වඩාත් හොඳය. අනාගත කාලරාමු සඳහා දේශපාලන ක්‍රියා මගින් ලබා දී ඇති ප්‍රාදේශීය වේලාව සිතියම් ගත කරන විශ්වීය වේලාව වෙනස් කළ හැකිය. වර්තමාන හා මෑත කාලීන කාලරාමු සඳහා, ඔබට tz දත්ත සමුදාය යාවත්කාලීන කිරීමේ හා වෙනස්කම් සිදු කිරීමේ ක්‍රියාවලිය නීති ක්‍රියාත්මක කිරීමේ කාලසටහනට වඩා මන්දගාමී විය හැකිය.
ප්ලග් වොෂ්

200

අනෙක් අය පැහැදිලි කළ පරිදි, එහි කාලය අත්හිටුවීමක් තිබේ. දී කළ හැකි කාල කලාප ඕෆ්සෙට් දෙකක් 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 භාවිතා කරන්නන්ට මෙය මෙවැනි ගැටලුවක් විසඳීමට මිනිසුන්ට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි.


1
හායි ඩැනියෙල්, මම ඔබේ කේත කොටස ධාවනය කර ඇති නමුත් එය අපේක්ෂිත පරිදි ප්‍රතිදානය ලබා නොදේ. කාල පරාසය වැනි තත්පර 1 ක් පමණක් වන අතර zot3 සහ zot4 යන දෙකම ශුන්‍ය වේ. මම දැන් මගේ පරිගණකයේ මෙම කේතය පිටපත් කර ධාවනය කර ඇත. මෙහි කළ යුතු යමක් තිබේද? ඔබට කේත කැබැල්ලක් දැකීමට අවශ්‍ය නම් මට දන්වන්න. මෙන්න කේත tutorialspoint.com/… ඔබට මෙහි සිදුවන්නේ කුමක්දැයි මට දන්වන්න පුළුවන්ද?
vineeshchauhan

2
invineeshchauhan එය ජාවාගේ අනුවාදය මත රඳා පවතී, මන්ද මෙය tzdata හි වෙනස් වී ඇති අතර JDK හි විවිධ අනුවාදයන් tzdata හි විවිධ සංස්කරණ එකතු කරයි. මා විසින්ම ස්ථාපනය කරන ලද ජාවා මත, වේලාවන් 1900-12-31 23:54:16සහ 1900-12-31 23:54:17, නමුත් ඔබ බෙදාගත් වෙබ් අඩවියේ එය ක්‍රියා නොකරයි, එබැවින් ඔවුන් මට වඩා වෙනස් ජාවා අනුවාදයක් භාවිතා කරයි.
ඩැනියෙල් සී. සොබ්‍රල්

167

IMHO ජාවා හි ව්‍යාප්ත, ව්‍යංග ප්‍රාදේශීයකරණය එහි විශාලතම සැලසුම් දෝෂයයි. එය පරිශීලක අතුරුමුහුණත් සඳහා අදහස් කළ හැකි නමුත්, අවංකවම, සමහර IDE හැරුණු විට අද දින පරිශීලක අතුරුමුහුණත් සඳහා ජාවා භාවිතා කරන්නේ කවුරුන්ද යන්න ඔබට මූලික වශයෙන් ප්‍රාදේශීයකරණය නොසලකා හැරිය හැක. ඔබට එය (විශේෂයෙන් ලිනක්ස් සේවාදායකයන් මත) නිවැරදි කළ හැකිය:

  • අපනයනය LC_ALL = C TZ = UTC
  • ඔබේ පද්ධති ඔරලෝසුව UTC ලෙස සකසන්න
  • අත්‍යවශ්‍ය නම් මිස කිසි විටෙකත් දේශීයකරණය කළ ක්‍රියාත්මක කිරීම් භාවිතා නොකරන්න (එනම් ප්‍රදර්ශනය සඳහා පමණි)

වෙත ජාවා ප්රජා ක්රියාවලිය සාමාජිකයන් මම නිර්දේශ:

  • දේශීයකරණ ක්‍රම පෙරනිමිය නොව, පරිශීලකයාට ප්‍රාදේශීයකරණය පැහැදිලිව ඉල්ලා සිටීම අවශ්‍ය වේ.
  • ඒ වෙනුවට UTF-8 / UTC ස්ථාවර පෙරනිමිය ලෙස භාවිතා කරන්න. ඔබට මේ වගේ නූල් නිෂ්පාදනය කිරීමට අවශ්‍ය නම් හැර වෙනත් දෙයක් කිරීමට හේතුවක් නැත.

මම කිව්වේ, එන්න, ගෝලීය ස්ථිතික විචල්‍යයන් OO විරෝධී රටාවක් නොවේද? වෙනත් මුලික පරිසර විචල්‍යයන් විසින් ලබා දී ඇති ප්‍රකෘති පැහැර හැරීම් වෙන කිසිවක් නොවේ .......


21

අනෙක් අය පැවසූ පරිදි, එය 1927 දී ෂැංහයි හි කාල වෙනස් කිරීමකි.

එය 23:54:07දේශීය සම්මත වේලාව වන ෂැංහයි හි සිටියදී, නමුත් මිනිත්තු 5 යි තත්පර 52 කට පසුව, එය ඊළඟ දවසට හැරී 00:00:00, පසුව දේශීය සම්මත වේලාව නැවත වෙනස් විය23:54:08 . ඉතින්, ඔබ බලාපොරොත්තු වූ පරිදි, වාර දෙක අතර වෙනස තත්පර 343 තත්පර 1 නොව 1 යි.

එක්සත් ජනපදය වැනි වෙනත් ස්ථානවල ද කාලය අවුල් විය හැකිය. එක්සත් ජනපදයට දිවා ආලෝකය ඉතිරි කිරීමේ කාලය තිබේ. දිවා ආලෝකය ඉතිරි කිරීමේ කාලය ආරම්භ වන විට කාලය පැය 1 ක් ඉදිරියට යයි. නමුත් ටික වේලාවකට පසු දිවා සුරැකීමේ කාලය අවසන් වන අතර එය පැය 1 ක් පසුපසට සම්මත කාල කලාපයට යයි. එබැවින් සමහර විට එක්සත් ජනපදයේ වේලාවන් සංසන්දනය කිරීමේදී වෙනස ආසන්න වේ3600 තත්පර 1 ක් නොව තත්පර 1 ක් වේ.

නමුත් මෙම කාල දෙකේ වෙනස්වීම් සම්බන්ධයෙන් වෙනස් දෙයක් තිබේ. දෙවැන්න අඛණ්ඩව වෙනස් වන අතර කලින් සිදු වූ වෙනස පමණි. එය එකම ප්‍රමාණයකින් ආපසු වෙනස් වූයේ හෝ නැවත වෙනස් වූයේ නැත.

ප්‍රදර්ශනයේදී මෙන් UTC නොවන කාලය භාවිතා කිරීමට අවශ්‍ය නම් මිස කාලය වෙනස් නොවන තැන UTC භාවිතා කිරීම වඩා හොඳය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.