public class Main {
public static void main(String[] args) {
String date = "June 11, 2018";
System.out.println(date);
}
}
Аммо ин усул камбудиҳои зиёде дорад. Синф String
барои кор бо матн сохта шудааст ва он усулҳои мувофиқ дорад. Агар ба мо лозим ояд, ки бо ягон роҳ санаро идора кунем (масалан, ба он 2 соат илова кунед), он String
дар ин ҷо кор намекунад. Ё, масалан, сана ва вақти ҷорӣро дар вақти дар консол тартиб додани барнома намоиш диҳед. Он дар ин ҷо String
ҳам кӯмак намекунад: ҳангоми навиштани рамз ва иҷро кардани он, вақт тағир меёбад ва номувофиқ дар консол нишон дода мешавад. Аз ин рӯ, дар Java, созандагони он барои кор бо санаҳо ва вақтҳо якчанд синфҳо пешниҳод карданд. Аввалин синф астjava.util.Date
Синфи санаи Java
Мо ба он номи пурраи онро додем, зеро дар бастаи дигар дар Java синф низ ҳастjava.sql.Date
. Ошуфта нашавед! Аввалин чизе, ки шумо бояд дар бораи он донед, он аст, ки он санаро дар миллисонияҳо нигоҳ медорад , ки аз 1 январи соли 1970 гузаштааст. Ҳатто номи алоҳида барои ин сана вуҷуд дорад - "Unix time". Як роҳи ҷолиб, оё шумо розӣ нестед? :) Чизи дуюме, ки бояд дар хотир дошт: агар шумо an objectеро Date
бо конструктори холӣ созед, натиҷа сана ва вақти ҷорӣ дар вақти сохтани an object хоҳад буд . String
Оё шумо дар хотир доред, ки мо чӣ гуна навишта будем, ки чунин вазифа барои формати сана мушкил хоҳад буд? Синф Date
онро ба осонӣ ҳал мекунад.
public class Main {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
}
}
Ин рамзро якчанд маротиба иҷро кунед ва шумо хоҳед дид, ки ҳар дафъа вақт чӣ гуна тағйир меёбад :) Ин маҳз аз он сабаб имконпазир аст, ки он дар миллисонияҳо нигоҳ дошта мешавад: онҳо хурдтарин воҳиди вақт мебошанд, бинобар ин натиҷаҳо хеле дақиқанд. Барои : дигар конструктор вуҷуд дорад Date
: шумо метавонед шумораи дақиқи миллисонияҳоро, ки аз соати 00:00 1 январи соли 1970 то санаи зарурӣ гузаштаанд, муайян кунед ва он офарида мешавад:
public class Main {
public static void main(String[] args) {
Date date = new Date(1212121212121L);
System.out.println(date);
}
}
Натиҷаи консол:
Fri May 30 08:20:12 MSD 2008
Мо онро 30 майи соли 2008 гирифтем. "Ҷум" маънои рӯзи ҳафтаро дорад - "Ҷумъа" (ҷумъа) ва MSD - "Рӯзи тобистонаи Маскав" (бо вақти тобистони Маскав). Миллисонияҳо дар формат интиқол дода мешаванд long
, зеро шумораи онҳо аксар вақт ба int
. Пас, дар кори мо ба мо чӣ гуна амалиёти санавӣ лозим шуда метавонад? Хуб, чизи равшантарин, албатта, муқоиса аст . Муайян кунед, ки як сана дертар ё пештар аз дигар буд. Инро бо роҳҳои гуногун анҷом додан мумкин аст. Масалан, шумо метавонед усули .-ро даъват кунед Date.getTime()
, ки шумораи миллисонияҳоеро, ки аз 1 январи соли 1970 аз нисфи шаб гузаштаанд, бармегардонад. Биёед онро танҳо дар ду an objectи Date даъват кунем ва онҳоро бо ҳамдигар муқоиса кунем:
public class Main {
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date();
System.out.println((date1.getTime() > date2.getTime())?
"date1 is later than date2" : "date1 is earlier than date2");
}
}
Хулоса:
date1 раньше date2
Аммо роҳи қулайтар вуҷуд дорад, яъне истифодаи усулҳои махсуси синф Date
: before()
, after()
ва equals()
. Ҳамаи онҳо натиҷаро дар boolean
. Ин усул before()
месанҷад, ки оё санаи мо аз санае, ки мо ҳамчун далел мегузарем, пештар аст:
public class Main {
public static void main(String[] args) throws InterruptedException {
Date date1 = new Date();
Thread.sleep(2000);//pause the program for 2 seconds
Date date2 = new Date();
System.out.println(date1.before(date2));
}
}
Натиҷаи консол:
true
Ин усул ба ҳамин тарз кор мекунад after()
; он тафтиш мекунад, ки санаи мо дертар аз санае буд, ки мо ҳамчун далел мегузарем:
public class Main {
public static void main(String[] args) throws InterruptedException {
Date date1 = new Date();
Thread.sleep(2000);//pause the program for 2 seconds
Date date2 = new Date();
System.out.println(date1.after(date2));
}
}
Натиҷаи консол:
false
Дар мисолҳои мо, мо барномаро барои 2 сония ба хоб мегузорем, то ки ду сана кафолат дода шавад, ки гуногунанд. Дар компютерҳои тез, вақт байни эҷод date1
ва date2
метавонад камтар аз як миллисония бошад, дар ин ҳолат ҳам ва before()
ва ҳам after()
бармегарданд false
. Аммо усул equals()
дар чунин вазъият бармегардад true
! Баъд аз ҳама, он маҳз шумораи миллисонияҳоеро, ки аз соати 00:00 1 январи соли 1970 барои ҳар як сана гузаштаанд, муқоиса мекунад. Объектҳо танҳо баробар ҳисобида мешаванд, агар онҳо то миллисония мувофиқат кунанд:
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date();
System.out.println(date1.getTime());
System.out.println(date2.getTime());
System.out.println(date1.equals(date2));
}
Дар ин ҷо як чизи дигаре ҳаст, ки шумо бояд ба он диққат диҳед. Агар шумо ҳуҷҷатҳои синфро дар вебсайти Oracle кушоед , хоҳед дид, ки бисёре аз усулҳо ва конструкторҳои он ҳамчун (“кӯҳнашуда”) Date
таъин шудаанд . Deprecated
Инак, бубинед: Таърихи синф Ин аст он чизе ки худи созандагони Java дар бораи он қисматҳои синфҳое, ки бекор карда шудаанд, мегӯянд: “Энменти барномае, ки бо @Deprecated шарҳ дода шудааст, он чизест, ки барномасозон аз истифодаи он рӯҳафтода мешаванд, одатан аз сабаби он хатарнок аст ё аз он сабаб. алтернативаи беҳтаре вуҷуд дорад." Ин маънои онро надорад, ки ин усулҳоро умуман истифода бурдан мумкин нест. Ғайр аз он, агар шумо худатон кӯшиш кунед, ки codeро бо истифода аз онҳо дар IDEA иҷро кунед, он эҳтимолан кор хоҳад кард.. Барои мисол усули бекоршударо гирем Date.getHours()
, ки шумораи соатҳоро аз an object бармегардонад Date
.
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.getHours());
}
Агар вақте ки шумо рамзро иҷро мекунед, масалан, соат 14:21 бошад, он рақами 14-ро намоиш медиҳад. Тавре ки шумо мебинед, усули бекоршуда хат кашида шудааст, аммо он хеле хуб кор мекунад. Ин усулҳо пурра нест карда нашудаанд, то ки як қатор codeҳои аллакай бо истифода аз онҳо навишташуда вайрон нашавад. Яъне, ин усулҳо "шикаста" ё "нест карда нашудаанд", онҳо танҳо барои истифода аз сабаби мавҷудияти алтернативаи мувофиқ тавсия дода намешаванд. Дар омади гап, дар ин бора дуруст дар ҳуҷҷатҳо навишта шудааст: Аксари усулҳои синфи Date ба versionи такмилёфта ва васеъшудаи он - class кӯчонида шуданд Calendar
. Мо бо ӯ бештар шинос мешавем :)
Тақвими Java
Java 1.1 синфи навро муаррифӣ кард -Calendar
. Вай кор бо санаҳо дар Java нисбат ба пештара каме осонтар кард. Ягона татбиқи синфе Calendar
, ки мо бо он кор хоҳем кард, синф аст GregorianCalendar
(он тақвими григорианиро амалӣ мекунад, ки тибқи он аксари кишварҳои ҷаҳон зиндагӣ мекунанд). Бароҳатии асосии он дар он аст, ки он метавонад бо санаҳо дар формати мувофиқтар кор кунад. Масалан, ӯ метавонад:
- Ба санаи ҷорӣ як моҳ ё рӯз илова кунед
- Санҷед, ки оё сол соли кабиса аст;
- Ҷузъҳои инфиродии санаро гиред (масалан, рақами моҳро аз тамоми сана гиред)
- Ва инчунин, дар дохor он системаи хеле қулайи константҳо таҳия шудааст (мо бисёре аз онҳоро дар зер мебинем).
Calendar
дар он аст, ки он константаро амалӣ мекунад Calendar.Era
: шумо метавонед санаро ба давраи то милод (Пеш аз Масеҳ - пеш аз таваллуди Масеҳ, яъне "пеш аз эраи мо") ё AC (Баъд аз Масеҳ" - " таъин кунед. даврони мо"). Хамаи инро бо мисолхо дида мебароем. Биёед тақвимро бо санаи 25 январи соли 2017 эҷод кунем:
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, 0 , 25);
}
Моҳҳо дар синф Calendar
(чун дар Date
, дар омади гап) аз сифр оғоз мешаванд, аз ин рӯ мо рақами 0-ро ҳамчун далели дуюм гузаштем. Чизи асосӣ ҳангоми кор бо синф Calendar
фаҳмидани он аст, ки ин тақвим аст , на санаи алоҳида. Санаи танҳо як қатор рақамҳоест, ки давраи муайяни вақтро ифода мекунанд. Ва тақвим як дастгоҳи томест, ки бо он шумо метавонед бо санаҳо бисёр корҳоро анҷом диҳед :) Инро хеле равшан дидан мумкин аст, агар шумо кӯшиш кунед, ки an objectи Calendar-ро ба консол бароварданӣ шавед: Натиҷа:
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=0,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=25,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
Бубинед, ки чӣ қадар маълумот вуҷуд дорад! Тақвим дорои як қатор хосиятҳое мебошад, ки санаи муқаррарӣ надорад ва ҳамаи онҳо ба консол бароварда мешаванд (усул toString()
дар синф ҳамин тавр кор мекунад Calendar
). Агар, ҳангоми кор, шумо танҳо лозим аст, ки санаи оддӣ аз тақвим гиред, яъне. an object Date
- ин бо истифода аз усул анҷом дода мешавад Calendar.getTime()
(ном мантиқтарин нест, аммо ҳеҷ кор карда намешавад):
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, 0 , 25);
Date date = calendar.getTime();
System.out.println(date);
}
Хулоса:
Wed Jan 25 00:00:00 MSK 2017
Акнун мо тақвимро ба санаи муқаррарӣ «содда» кардем. Биёед пеш равем. Илова ба аломатҳои ададӣ барои моҳҳо, Calendar
константаҳоро дар синф истифода бурдан мумкин аст. Константҳо майдонҳои статикии синф Calendar
бо арзиши аллакай муқарраршуда мебошанд, ки тағир дода намешаванд. Ин вариант воқеан беҳтар аст, зеро он хониши codeро беҳтар мекунад.
public static void main(String[] args) {
GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
}
Calendar.JANUARY
— яке аз константахо барои нишон додани мох. Бо ин варианти номгузорӣ, ҳеҷ кас фаромӯш намекунад, масалан, рақами "3" маънои апрелро дорад, на моҳи сеюми мо - март. Шумо танҳо нависед Calendar.APRIL
- ва ҳамин тавр аст :) Ҳама майдонҳои тақвимӣ (рӯз, моҳ, дақиқаҳо, сонияҳо ва ғ.) метавонанд бо истифода аз усули set()
. Ин хеле қулай аст, зеро Calendar
ҳар як майдон дар синф доимии худро дорад ва рамзи ниҳоӣ то ҳадди имкон содда хоҳад буд. Масалан, дар мисоли қаблӣ мо сана эҷод кардем, аммо вақти ҷорӣро барои он муқаррар накардаем. Биёед вақтро ба 19:42:12 муқаррар кунем
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2017);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 25);
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
System.out.println(calendar.getTime());
}
Хулоса:
Wed Jan 25 19:42:12 MSK 2017
Мо методро меномем set()
, ба он константа (вобаста ба майдоне, ки мо тағир додан мехоҳем) ва арзиши навро барои ин майдон мегузорем. Маълум мешавад, ки усул set()
як навъ "супер-танзимкунанда" аст, ки метавонад на барои як майдон, балки барои бисёр майдонҳо арзиш муқаррар кунад :) Илова ва тарҳ кардани арзишҳо дар синф Calendar
бо истифода аз add()
. Шумо бояд ба он майдонеро, ки шумо тағир додан мехоҳед, ворид кунед ва рақам - маҳз чӣ қадар мехоҳед аз арзиши ҷорӣ илова/тарҳ кунед. Масалан, биёед санаи 2 моҳ пеш офаридаамонро муқаррар кунем:
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 19);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
calendar.add(Calendar.MONTH, -2);//to subtract a value - a negative number must be passed to the method
System.out.println(calendar.getTime());
}
Хулоса:
Fri Nov 25 19:42:12 MSK 2016
Аҷоиб! Мо санаро ба 2 моҳ пеш муқаррар кардем. Дар натиҷа, на танҳо моҳ, балки сол ҳам иваз шуд, аз соли 2017 то 2016. Ҳисобкунии соли ҷорӣ ҳангоми интиқоли санаҳо, албатта, ба таври худкор анҷом дода мешавад ва ба таври дастӣ назорат кардан лозим нест. Аммо агар барои ягон мақсад ба шумо лозим ояд, ки ин рафторро хомӯш кунед, шумо метавонед ин корро кунед. Усули махсус roll()
метавонад арзишҳоро бидуни таъсир ба арзишҳои дигар илова ва кам кунад. Масалан, ба ин монанд:
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
calendar.roll(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
}
Мо айнан ҳамон тавре ки дар мисоли қаблӣ кор кардем - мо аз санаи ҷорӣ 2 моҳро тарҳ кардем. Аммо ҳоло рамз ба таври дигар кор мекард: моҳ аз январ то ноябр иваз шуд, аммо сол мисли соли 2017 боқӣ монд! Хулоса:
Sat Nov 25 10:42:12 MSK 2017
Минбаъд. Тавре ки мо дар боло гуфтем, ҳамаи майдонҳои an objectро Calendar
алоҳида гирифтан мумкин аст. Усул барои ин масъул аст get()
:
public static void main(String[] args) {
GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
System.out.println("Year: " + calendar.get(Calendar.YEAR));
System.out.println("Month: " + calendar.get(Calendar.MONTH));
System.out.println("Number of the week in the month: " + calendar.get(Calendar.WEEK_OF_MONTH));// serial number of the week in the month
System.out.println("Number: " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("Watch: " + calendar.get(Calendar.HOUR));
System.out.println("Minutes: " + calendar.get(Calendar.MINUTE));
System.out.println("Seconds: " + calendar.get(Calendar.SECOND));
System.out.println("Milliseconds: " + calendar.get(Calendar.MILLISECOND));
}
Хулоса:
Год: 2017
Месяц: 0
Порядковый номер недели в месяце: 4
Число: 25
Часы: 10
Минуты: 42
Секунды: 12
Миллисекунды: 0
Яъне, дар синф ба ѓайр аз «супер-стер» Calendar
як «супер-гетер» низ вуљуд дорад :) Дигар нуктаи љолиб, албатта, кор бо эрањост. Барои сохтани санаи "BC" шумо бояд майдонро истифода баред Calendar.Era
. Ин 2 августи соли 216 пеш аз милод рӯй дод. д.:
public static void main(String[] args) {
GregorianCalendar cannes = new GregorianCalendar(216, Calendar.AUGUST, 2);
cannes.set(Calendar.ERA, GregorianCalendar.BC);
DateFormat df = new SimpleDateFormat("dd MMM yyy GG");
System.out.println(df.format(cannes.getTime()));
}
Дар ин ҷо мо синфро SimpleDateFormat
барои нишон додани сана дар формате истифода кардем, ки барои мо фаҳмотар бошад (ҳарфҳои "GG" барои намоиши давр масъуланд). Хулоса:
02 авг 216 до н.э.
Дар синф Calendar
усулҳо ва константаҳои бештар мавҷуданд , дар бораи онҳо дар ҳуҷҷатҳо хонед:
Табдил додани сатр ба сана
Барои табдил додани сатр ба сана, шумо метавонед синфи ёрирасони Java - SimpleDateFormat -ро истифода баред . Ин синфест, ки шумо бояд санаро ба формати муайянкардаатон табдил диҳед. Дар навбати худ, он ба DateFormat хеле монанд аст . Ягона фарқияти назаррас байни ин ду дар он аст, ки SimpleDateFormat метавонад барои форматкунӣ (табдил додани сана ба сатр) ва таҳлor сатр ба санаи аз маҳалли маҳаллӣ истифода шавад, дар ҳоле ки DateFormat маҳаллиро дастгирӣ намекунад. Илова бар ин, DateFormat синфи абстрактист, ки дастгирии асосиро барои форматкунӣ ва таҳлor санаҳо таъмин мекунад, дар ҳоле ки SimpleDateFormat синфи мушаххасест, ки синфи DateFormat-ро васеъ мекунад. Намунаи сохтани an objectи SimpleDateFormat ва форматкунии Сана чунин аст:SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(1212121212121L);
System.out.println(formatter.format(date));
Дар мисоли боло мо намунаи "yyyy-MM-dd HH:mm:ss"-ро истифода бурдем, ки маънои:
- 4 рақам барои сол (yyyy);
- 2 рақам барои моҳ (ММ);
- 2 рақам барои рӯз (dd);
- 2 рақам барои соатҳо дар формати 24 соат (HH);
- 2 рақам барои дақиқаҳо (мм);
- 2 рақам барои сонияҳо (ss).
2008-05-30 08:20:12
Барои синфи SimpleDateFormat ҳарфҳои шаблон хеле зиёданд . Барои он ки шумо ошуфта нашавед, мо онҳоро дар ҷадвал ҷамъ овардаем:
Рамз | Тавсифи | Мисол |
---|---|---|
Г | эра (бо локализатсияи англисӣ - милод ва милод) | AD |
й | сол (рақами 4-рақама) | 2020 |
yy | сол (2 рақами охир) | 20 |
ееее | сол (рақами 4-рақама) | 2020 |
М | рақами моҳ (бе сифрҳои пешбаранда) | 8 |
ММ | рақами моҳ (бо сифрҳои пешбаранда, агар рақами моҳ <10 бошад) | 04 |
МММ | мухтасари моҳаи се ҳарфӣ (мувофиқи маҳаллисозӣ) | январ |
ММММ | номи пурраи моҳ | июн |
в | ҳафтаи сол (бе сифрҳои пешбаранда) | 4 |
ww | ҳафтаи сол (бо сифрҳои пешбаранда) | 04 |
В | ҳафта дар моҳ (бе сифрҳои пешбаранда) | 3 |
WW | ҳафта дар моҳ (бо сифр пешбаранда) | 03 |
Д | рӯзи сол | 67 |
г | рӯзи моҳ (бе сифрҳои пешбаранда) | 9 |
дд | рӯзи моҳ (бо сифрҳои пешбаранда) | 09 |
Ф | рӯзи ҳафта дар моҳ (бе сифрҳои пешбаранда) | 9 |
FF | рӯзи ҳафта дар моҳ (бо сифрҳои пешбаранда) | 09 |
Э | рӯзи ҳафта (ихтисор) | В |
EEEE | рӯзи ҳафта (пурра) | Ҷумъа |
у | рақами рӯзи ҳафта (бе сифрҳои пешбаранда) | 5 |
uu | рақами рӯзи ҳафта (бо сифрҳои пешбаранда) | 05 |
а | Нишондиҳандаи AM/PM | А.М. |
Х | соат дар формати 24 соат бе сифрҳои пешбаранда | 6 |
HH | соат дар формати 24 соат бо сифр пешбаранда | 06 |
к | шумораи соатҳо дар формати 24 соат | 18 |
К | шумораи соатҳо дар формати 12 соат | 6 |
ч | вақт дар формати 12 соат бе сифрҳои пешбаранда | 6 |
щ | вақт дар формати 12 соат бо сифр пешбаранда | 06 |
м | дақиқа бе сифрҳои пешбаранда | 32 |
мм | дақиқа бо пешбари сифр | 32 |
с | сония бе сифрҳои пешбаранда | ёздаҳ |
сс | сония бо пешбари сифр | ёздаҳ |
С | миллисонияҳо | 297 |
з | Минтақаи вақт | Вақти Аврупои Шарқӣ |
З | Минтақаи вақт дар формати RFC 822 | 300 |
Намуна | Мисол |
---|---|
gg-MM-yyyy | 01-11-2020 |
yy-MM-dd | 10-01-2019 |
СС:мм:сс.SSS | 23:59.59.999 |
yyyy-MM-gg HH:mm:ss | 2018-11-30 03:09:02 |
yyyy-MM-gg HH:mm:ss.SSS | 2016-03-01 01:20:47.999 |
yyyy-MM-gg HH:mm:ss.SSS Z | 2013-13-13 23:59:59.999 +0100 |
-
Хатеро созед, ки аз он шумо бояд санаро таъин кунед:
String strDate = "Sat, April 4, 2020";
-
Мо an objectи нави SimpleDateFormat -ро бо қолабе эҷод мекунем, ки ба он чизе, ки дар сатр дорем, мувофиқат мекунад (дар акси ҳол мо онро таҳлил карда наметавонем):
SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMMM d, yyyy", Locale.ENGLISH);
Тавре ки шумо мебинед, мо дар ин ҷо як далели маҳаллӣ дорем. Агар мо онро сарфи назар кунем, он забони пешфарзро истифода хоҳад кард, ки на ҳамеша англисӣ аст.
Агар маҳалли ҷойгиршавӣ ба сатри вуруд мувофиқат накунад, он гоҳ маълумотҳои сатри ба забон пайвастшуда, ба монанди забони мо Mon ё April эътироф намешаванд ва java.text.ParseExceptionро мепартоянд, ҳатто агар намуна мувофиқат кунад.
Аммо, ба мо лозим нест, ки форматро муайян кунем, агар мо қолаберо истифода барем, ки ба забон хос нест. Мисол - yyyy-MM-dd HH:mm:ss
-
Мо бо истифода аз форматкунанда сана эҷод мекунем, ки он дар навбати худ онро аз сатри воридот таҳлил мекунад:
try { Date date = formatter.parse(strDate); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); }
Натиҷаи консол:
Sat Apr 04 00:00:00 EEST 2020
Хмм... Аммо формат дигар як хел нест!
Барои сохтани ҳамон формат, мо боз форматкуниро истифода мебарем:
System.out.println(formatter.format(date));
Натиҷаи консол:
Sat, April 4, 2020
SimpleDateFormat ва Calendar
SimpleDateFormat ба шумо имкон медиҳад, ки ҳама an objectҳои Сана ва Тақвимро, ки шумо барои истифодаи минбаъда эҷод мекунед, формат кунед. Биёед як нуктаи ҷолибро, монанди кор бо эраҳо баррасӣ кунем. Барои эҷод кардани санаи "BC", шумо бояд майдони Calendar.Era -ро истифода баред. Масалан, биёед санаеро эҷод кунем, ки Ҷанги Каннаро нишон медиҳад, ки дар он Ганнибал артиши Румро мағлуб кардааст. Ин 2 августи соли 216 пеш аз милод рӯй дод. д.:public static void main(String[] args) {
GregorianCalendar cannes = new GregorianCalendar(216, Calendar.AUGUST, 2);
cannes.set(Calendar.ERA, GregorianCalendar.BC);
DateFormat df = new SimpleDateFormat("dd MMM yyy GG");
System.out.println(df.format(cannes.getTime()));
}
Дар ин ҷо мо синфи SimpleDateFormat-ро истифода бурдем, то санаро дар формате, ки барои мо фаҳмотар бошад, нишон диҳад (тавре ки дар боло нишон дода шуд, ҳарфҳои "GG" барои намоиши давр масъуланд). Хулоса:
02 авг 216 до н.э.
Формат санаи Java
Ана боз як парвандаи дигар. Фарз мекунем, ки ин формати сана ба мо мувофиқат намекунад:
Sat Nov 25 10:42:12 MSK 2017
Пас, ин ҷост. Бо истифода аз қобorятҳои мо дар формати санаи java, шумо метавонед онро бидуни мушкor худ ба худ иваз кунед:
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, d MMMM yyyy");
Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
calendar.roll(Calendar.MONTH, -2);
System.out.println(dateFormat.format(calendar.getTime()));
}
Хулоса:
суббота, 25 Ноябрь 2017
Хеле беҳтар, дуруст? :)
GO TO FULL VERSION