එය දුෂ්කර ක්රමය වන අතර, java.util.Date
ජාවා 1.1 (1997) සිට එම සැකසුම් ක්රම ඉවත් කර ඇත. ආදාන නූලට ගැලපෙන ආකෘති රටාවක් භාවිතා SimpleDateFormat
කරමින් දිනය සරලව සංයුති කරන්න .
ආදාන නූල ලෙස ඔබේ “2010 ජනවාරි 2” විශේෂිත අවස්ථාවෙහිදී:
- "ජනවාරි" යනු සම්පූර්ණ පෙළ මාසය බැවින් ඒ සඳහා
MMMM
රටාව භාවිතා කරන්න
- "2" යනු මාසයේ කෙටි දිනය වන බැවින් ඒ සඳහා
d
රටාව භාවිතා කරන්න .
- "2010" යනු ඉලක්කම් 4 ක වසරකි, එබැවින් ඒ සඳහා
yyyy
රටාව භාවිතා කරන්න .
String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010
පැහැදිලි Locale
තර්කයේ වැදගත්කම සැලකිල්ලට ගන්න . ඔබ එය මඟ හැරියහොත් , එය ආදාන නූලෙහි මාසයේ නමෙහි භාවිතා වන පරිදි අනිවාර්යයෙන්ම ඉංග්රීසි නොවන පෙරනිමි පෙදෙසක් භාවිතා කරයි . පෙදෙසි ආදාන නූල සමඟ නොගැලපේ නම්, java.text.ParseException
ආකෘති රටාව වලංගු යැයි පෙනුනද ඔබ ව්යාකූල ලෙස ලබා ගනී .
ජාවාඩොක් වෙතින් අදාළ වන සාරය මෙන්න , පවතින සියලුම ආකෘති රටා ලැයිස්තුගත කරන්න:
Letter Date or Time Component Presentation Examples
------ ---------------------- ------------------ -------------------------------------
G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M/L Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
u Day number of week Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
රටා සිද්ධි සංවේදී බවත්, අක්ෂර හතරක් හෝ ඊට වැඩි පෙළ පදනම් කරගත් රටා සම්පූර්ණ ස්වරූපය නියෝජනය කරන බවත් සලකන්න. නොමැති නම් කෙටි හෝ සංක්ෂිප්ත පෝරමයක් භාවිතා කරයි. එබැවින් උදා MMMMM
හෝ ඊට වැඩි ගණනක් අනවශ්යය.
SimpleDateFormat
අද දක්වා දී ඇති නූලක් විග්රහ කිරීම සඳහා වලංගු රටා පිළිබඳ උදාහරණ කිහිපයක් මෙන්න :
Input string Pattern
------------------------------------ ----------------------------
2001.07.04 AD at 12:08:56 PDT yyyy.MM.dd G 'at' HH:mm:ss z
Wed, Jul 4, '01 EEE, MMM d, ''yy
12:08 PM h:mm a
12 o'clock PM, Pacific Daylight Time hh 'o''clock' a, zzzz
0:08 PM, PDT K:mm a, z
02001.July.04 AD 12:08 PM yyyyy.MMMM.dd GGG hh:mm aaa
Wed, 4 Jul 2001 12:08:56 -0700 EEE, d MMM yyyy HH:mm:ss Z
010704120856-0700 yyMMddHHmmssZ
2001-07-04T12:08:56.235-0700 yyyy-MM-dd'T'HH:mm:ss.SSSZ
2001-07-04T12:08:56.235-07:00 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2001-W27-3 YYYY-'W'ww-u
වැදගත් සටහනක් බව ය SimpleDateFormat
ඇත නොහැකි ආරක්ෂිත නූල. වෙනත් වචන වලින් කිවහොත්, ඔබ එය කිසි විටෙකත් ස්ථිතික හෝ නිදර්ශන විචල්යයක් ලෙස ප්රකාශයට පත් කොට විවිධ ක්රම / නූල් වලින් නැවත භාවිතා නොකළ යුතුය. දේශීය විෂය පථය තුළ ඔබ සැමවිටම එය අලුත්ම නිර්මාණය කළ යුතුය.
ජාවා 8 යාවත්කාලීන කිරීම
ඔබ ජාවා 8 හෝ ඊට වඩා අළුත් නම්, භාවිතා කරන්න DateTimeFormatter
(මෙහි ද, සියලු පෙර සැකසූ ආකෘති සහ පවතින ආකෘති රටා බැලීමට සබැඳිය ක්ලික් කරන්න; නිබන්ධනය මෙහි ඇත ). මෙම නව API එක ජෝඩා ටයිම් විසින් දේවානුභාවයෙන් .
String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02
සටහන: ඔබේ හැඩතල රටාවේ කාල කොටසද අඩංගු වේ නම්, ඒ LocalDateTime#parse(text, formatter)
වෙනුවට භාවිතා කරන්න LocalDate#parse(text, formatter)
. තවද, ඔබේ ආකෘතියේ රටාව කාල කලාපයද අඩංගු වේ නම්, ඒ ZonedDateTime#parse(text, formatter)
වෙනුවට භාවිතා කරන්න.
ජාවාඩොක් වෙතින් අදාළ වන සාරය මෙන්න , පවතින සියලුම ආකෘති රටා ලැයිස්තුගත කරන්න:
Symbol Meaning Presentation Examples
------ -------------------------- ------------ ----------------------------------------------
G era text AD; Anno Domini; A
u year year 2004; 04
y year-of-era year 2004; 04
D day-of-year number 189
M/L month-of-year number/text 7; 07; Jul; July; J
d day-of-month number 10
Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter
Y week-based-year year 1996; 96
w week-of-week-based-year number 27
W week-of-month number 4
E day-of-week text Tue; Tuesday; T
e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T
F week-of-month number 3
a am-pm-of-day text PM
h clock-hour-of-am-pm (1-12) number 12
K hour-of-am-pm (0-11) number 0
k clock-hour-of-am-pm (1-24) number 0
H hour-of-day (0-23) number 0
m minute-of-hour number 30
s second-of-minute number 55
S fraction-of-second fraction 978
A milli-of-day number 1234
n nano-of-second number 987654321
N nano-of-day number 1234000000
V time-zone ID zone-id America/Los_Angeles; Z; -08:30
z time-zone name zone-name Pacific Standard Time; PST
O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;
x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z zone-offset offset-Z +0000; -0800; -08:00;
එය වඩාත් ජනප්රිය රටා සඳහා පූර්ව නිශ්චිත ආකෘති කිහිපයක් ඇති බව සලකන්න . එබැවින් උදා වෙනුවට DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
ඔබට භාවිතා කළ හැකිය DateTimeFormatter.RFC_1123_DATE_TIME
. මෙය කළ හැකි වන්නේ ඒවා ඊට පටහැනිව SimpleDateFormat
නූල් ආරක්ෂිත බැවිනි. අවශ්ය නම් ඔබට ඔබේම අර්ථ දැක්විය හැකිය.
විශේෂිත ආදාන නූල් ආකෘතියක් සඳහා, ඔබ පැහැදිලිව භාවිතා කිරීමට අවශ්ය නැත : 2016-09-26T17: 44: 57Z වැනි DateTimeFormatter
සම්මත ISO 8601 දිනයක්, LocalDateTime#parse(text)
එය දැනටමත් ISO_LOCAL_DATE_TIME
ආකෘතිය භාවිතා කරන බැවින් කෙලින්ම විග්රහ කළ හැකිය . ඒ හා සමානව, LocalDate#parse(text)
කාල සංරචකය නොමැතිව ISO දිනයක් විග්රහ කරයි (බලන්න ISO_LOCAL_DATE
), සහ ZonedDateTime#parse(text)
ඕෆ්සෙට් සහ කාල කලාපය එකතු කළ ISO දිනයක් විග්රහ කරයි (බලන්න ISO_ZONED_DATE_TIME
).