JavaRush /Java блогу /Random-KY /Убакытты кантип жоготпоо керек - DateTime жана Calendar

Убакытты кантип жоготпоо керек - DateTime жана Calendar

Группада жарыяланган
Салам! Бүгүн биз мурда кездешпеген жаңы маалымат түрү менен иштей баштайбыз, тактап айтканда даталар. Убакытты кантип жоготпоо керек - DateTime жана Calendar - 1Менимче, дата деген эмне экенин түшүндүрүүнүн кереги жок :) Негизи Java тorнде учурдагы күн менен убакытты кадимки сапта жазуу толук мүмкүн.
public class Main {
   public static void main(String[] args) {

       String date = "June 11, 2018";
       System.out.println(date);
   }
}
Бирок бул ыкманын көптөгөн кемчorктери бар. Класс Stringтекст менен иштөө үчүн түзүлгөн жана анын тиешелүү ыкмалары бар. Эгер кандайдыр бир жол менен датаны башкаруу керек болсо (мисалы, ага 2 саат кошуңуз), ал Stringбул жерде иштебейт. Же, мисалы, программа консолго түзүлгөн учурда учурдагы күндү жана убакытты көрсөтүңүз. Бул жерде Stringда жардам бербейт: сиз codeду жазып, аны иштетип жатканда, убакыт өзгөрүп, консольдо тиешеси жок нерсе көрсөтүлөт. Ошондуктан, Java-да анын жаратуучулары даталар жана убакыттар менен иштөө үчүн бир нече класстарды беришкен. Биринчиси - классjava.util.Date

Java дата классы

Биз анын толук атын бердик, анткени Javaда дагы башка пакетте класс бар java.sql.Date. Баш аламан болбоңуз! Бул тууралуу бorшиңиз керек болгон биринчи нерсе, ал 1970-жылдын 1-январынан бери өткөн датаны миллисекунддарда сактайт . Ал тургай, бул датанын өзүнчө аталышы бар - "Unix time" Бул абдан кызыктуу ыкма, макул эмессизби? :) Эсте турган экинчи нерсе: эгерде сиз an objectти бош конструктор менен түзсөңүз , натыйжа an object түзүлгөн учурда учурдагы дата жана убакытDate болот . Дата форматы үчүн мындай тапшырма көйгөйлүү болот деп кантип жазганыбыз эсиңиздеби? Класс аны оңой эле чечет. StringDate
public class Main {
   public static void main(String[] args) {

       Date date = new Date();
       System.out.println(date);
   }
}
Бул codeду бир нече жолу иштетиңиз, ошондо убакыттын ар бир жолу кандай өзгөрөөрүн көрөсүз :) Бул так миллисекунддарда сакталгандыктан мүмкүн: алар убакыттын эң кичинекей бирдиги, ошондуктан натыйжалар абдан так. үчүн дагы бир конструктор бар Date: 1970-жылдын 1-январындагы саат 00:00дөн талап кылынган күнгө чейин өткөн миллисекунддордун так санын көрсөтсөңүз болот жана ал түзүлөт:
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
Биз аны 2008-жылдын 30-майында алдык. "Жум" жуманын күнүн билдирет - "Жума" (Жума), жана MSD - "Moscow Daylight Saving" (Москва жайкы убактысы). Миллисекунддор форматта берилет long, анткени алардын саны көбүнчө туура келбейт int. Ошентип, биздин ишибизде кандай дата операциялары керек болушу мүмкүн? Эң айкын нерсе, албетте, салыштыруу . Бир дата экинчисинен кеч же эрте болгонун аныктаңыз. Бул ар кандай жолдор менен жасалышы мүмкүн. Мисалы, Date.getTime()1970-жылдын 1-январында түн жарымынан бери өткөн миллисекунддардын санын кайтарып берүүчү методду чакырсаңыз болот. Келгиле, аны эки Date an objectисине чакырып, аларды бири-бири менен салыштырып көрөлү:
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! Анткени, ал ар бир дата үчүн 1970-жылдын 1-январындагы саат 00:00дөн бери өткөн миллисекунддардын санын так салыштырат. Объекттер миллисекундга чейин дал келсе гана бирдей деп эсептелет:
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 веб-сайтында класстын documentациясын ачсаңыз Date, анын көптөгөн ыкмалары жана конструкторлору ("эскирген") деп белгиленгенин көрөсүз Deprecated. Мына, караңыз: Класс датасы Бул жерде Java түзүүчүлөрү класстардын эскирген бөлүктөрү жөнүндө мындай дешет: “@Deprecated менен annotationланган программа элементи программисттерди колдонуудан баш тарткан нерсе, адатта бул кооптуу же ошол себептен улам. жакшыраак альтернатива бар». Бул бул ыкмаларды таптакыр колдонууга болбойт дегенди билдирбейт. Мындан тышкары, эгер сиз codeду IDEAда аларды колдонуу менен иштетүүгө аракет кылсаңыз, анда ал иштеши мүмкүн.Мисалы, Date.getHours()an objectтен сааттардын санын кайтарган эскирген методду алалы Date.
public static void main(String[] args) {

   Date date1 = new Date();

   System.out.println(date1.getHours());

}
Эгерде сиз codeду иштетип жаткан учурда, мисалы, убакыт 14:21 болсо, ал 14 санын көрсөтөт. Көрүнүп тургандай, эскирген ыкма чийorп коюлган, бирок ал абдан жакшы иштейт. Бул ыкмалар мурунтан эле жазылган codeду бузуп албаш үчүн толугу менен жок кылынган эмес. Башкача айтканда, бул ыкмалар "сынган" же "алып салынган" эмес, алар жөн гана ыңгайлуу альтернатива болгондугуна байланыштуу колдонууга сунушталbyte. Айтмакчы, бул тууралуу documentацияда так жазылган: Убакытты кантип жоготпоо керек - DateTime жана Calendar - 2Date классынын методдорунун көбү анын өркүндөтүлгөн, кеңейтилген versionсына көчүрүлгөн - class Calendar. Биз аны менен дагы жакындан таанышабыз :)

Java календары

Java 1.1 жаңы классты киргизди - Calendar. Ал Java тorнде курма менен иштөөнү мурункуга караганда бир аз жеңилдетти. CalendarБиз иштей турган класстын жалгыз ишке ашырылышы бул класс GregorianCalendar(ал Григориан календарын ишке ашырат, ага ылайык дүйнөнүн көпчүлүк өлкөлөрү жашайт). Анын негизги ынгайлуулугу даталар менен ыңгайлуу форматта иштей алат. Мисалы, ал:
  • Учурдагы күнгө бир ай же күн кошуңуз
  • Жылдын секирик жыл экендигин текшерүү;
  • Жеке дата компоненттерин алуу (мисалы, бүтүндөй күндөн баштап айдын номерин алуу)
  • Жана ошондой эле анын ичинде абдан ыңгайлуу константа системасы иштелип чыккан (алардын көбүн төмөндө көрөбүз).
Класстын дагы бир маанилүү айырмасы Calendar- бул константты ишке ашырууда Calendar.Era: сиз датаны биздин заманга чейинки доорго ("Машаяктын алдында" - Машаяктын төрөлүшүнө чейин, б.а. "биздин доорго чейин") же AC ("Машаяктан кийин" - " биздин доор"). Мунун баарын мисалдар менен карап көрөлү. 2017-жылдын 25-январы датасы менен календарды түзөлү:
public static void main(String[] args) {

  Calendar calendar = new GregorianCalendar(2017, 0 , 25);
}
Класста айлар Calendar(айтмакчы Date, ) нөлдөн башталат, ошондуктан биз экинчи аргумент катары 0 санын өткөрдүк. Класс менен иштөөдө негизги нерсе бул өзүнчө күн эмес, календарьCalendar экенин түшүнүү . Дата – бул белгилүү бир убакыт аралыгын билдирген сандардын тизмеси. Ал эми календарь бул бүтүндөй бир түзүлүш, анын жардамы менен даталар менен көп нерселерди жасай аласыз :) Эгер сиз Календар an objectисин консолго чыгарууга аракет кылсаңыз, муну так көрүүгө болот: Чыгуу: Убакытты кантип жоготпоо керек - DateTime жана Calendar - 3

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класста ар бир талаанын өзүнүн константасы бар жана акыркы code мүмкүн болушунча жөнөкөй көрүнөт. Мисалы, мурунку мисалда биз күн түздүк, бирок ага учурдагы убакытты койгон жокпуз. Убакытты 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 айды алып койдук. Бирок азыр code башкача иштеди: ай январдан ноябрга чейин өзгөрдү, бирок жыл 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 Мисалы, Ганнибал Римдин армиясын талкалаган Канна согушун көрсөткөн датаны түзөлү. Бул биздин заманга чейинки 216-жылдын 2-августунда болгон. д.:
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дагы көптөгөн ыкмалар жана туруктуулар бар , алар жөнүндө documentациядан окуңуз:

Сапты Датага айландыруу

String to Date конversionлоо үчүн, сиз Java жардамчы классын колдоно аласыз - SimpleDateFormat . Бул датаны сиз аныктаган форматка айландыруу үчүн керектүү класс. Убакытты кантип жоготпоо керек - DateTime жана Calendar - 5Өз кезегинде, ал DateFormat менен абдан окшош . Экөөнүн ортосундагы бир гана көрүнүктүү айырма SimpleDateFormat форматтоо (күндү сапка айландыруу) жана сапты тилди билген датага талдоо үчүн колдонулушу мүмкүн, ал эми DateFormat тилди колдобойт. Кошумча, DateFormat даталарды форматтоо жана талдоо үчүн негизги колдоону камсыз кылган абстракттуу класс, ал эми SimpleDateFormat DateFormat классын кеңейтүүчү конкреттүү класс. SimpleDateFormat an objectин түзүү жана Датаны форматтоо мисалы ушундай болот:
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(1212121212121L);

System.out.println(formatter.format(date));
Жогорудагы мисалда биз "жжжж-АА-кк СС:мм:сс" үлгүсүн колдондук, бул дегенди билдирет:
  • жыл үчүн 4 цифра (жжж);
  • Ай үчүн 2 цифра (ММ);
  • күн үчүн 2 цифра (dd);
  • 24 сааттык форматта сааттар үчүн 2 цифра (HH);
  • мүнөт үчүн 2 цифра (мм);
  • секунд үчүн 2 цифра (ss).
Үлгү белгилеринин бөлүү белгилери жана тартиби сакталган. Консолдук чыгаруу:
2008-05-30 08:20:12
SimpleDateFormat классы үчүн бир топ шаблон тамгалары бар . Сиз чаташтырбоо үчүн, биз аларды tableга чогулттук:
Символ Description Мисал
Г доор (англисче локализацияда - AD жана BC) AD
ж жыл (4 орундуу сан) 2020
ж жыл (акыркы 2 сан) 20
жжж жыл (4 орундуу сан) 2020
М айдын саны (башкы нөлсүз) 8
MM айдын саны (ай саны < 10 болсо, алдыңкы нөлдөр менен) 04
MMM үч тамгадан турган ай аббревиатурасы (локализацияга ылайык) январь
MMMM толук ай аты Июнь
w жылдын жумасы (башкы нөлсүз) 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
с нөлсүз секунд он бир
ss нөл менен секунд он бир
С миллисекунд 297
з Убакыт зонасы EET
З RFC 822 форматындагы убакыт алкагы 300
Үлгү белгилеринин айкалыштарынын мисалдары:
Үлгү Мисал
кд-АА-жжж 01-11-2020
жжж-АА-кк 2019-10-01
СС:мм:сс.SSS 23:59.59.999
жжжж-АА-кк СС:мм:сс 2018-11-30 03:09:02
жжж-АА-кк СС:мм:сс.SSS 2016-03-01 01:20:47.999
жжжж-АА-кк СС:мм:сс.SSS Z 2013-13-13 23:59:59.999 +0100
Эгерде сиз форматта бир аз ката кетирсеңиз, анда сиз java.text.ParseException ээси боло аласыз жана бул өзгөчө жагымдуу жетишкендик эмес. SimpleDateFormat программасына кыска экскурсия бүттү - келгиле, бүгүнкү күнгө чейин java сап котормосуна кайрылып көрөлү . SimpleDateFormat бизге ушундай мүмкүнчүлүктөрдү берет жана биз бул процессти этап-этабы менен басып өтөбүз.
  1. Датаны орнотуу керек болгон сапты түзүңүз:

    String strDate = "Sat, April 4, 2020";
  2. Биз жаңы SimpleDateFormat an objectисин сапта болгон нерсеге дал келген шаблон менен түзөбүз (антпесе аны талдай албайбыз):

    SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMMM d, yyyy", Locale.ENGLISH);

    Көрүнүп тургандай, бул жерде бизде Locale аргументи бар. Эгер биз аны өткөрүп жиберсек, ал демейки Localeди колдонот, ал дайыма англисче эмес.

    Эгерде жергorктүү тил киргизүү сапына дал келбесе, анда тилге байланган сап берorштери, мисалы, Mon же April сыяктуу, таанылbyte жана үлгү дал келсе дагы, java.text.ParseException ыргытат.

    Бирок, эгерде биз тилге мүнөздүү эмес шаблонду колдонуп жаткан болсок, форматты көрсөтүүнүн кереги жок. Мисал катары - жжжж-АА-кк СС:мм:сс

  3. Форматтоочтун жардамы менен күндү түзөбүз, ал өз кезегинде аны киргизүү сабынан талдайт:

    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 жана Календар

SimpleDateFormat кийинчерээк колдонуу үчүн жараткан бардык Дата жана Календар an objectтерин форматтоого мүмкүндүк берет. Келгиле, доорлор менен иштөө сыяктуу кызыктуу жагдайды карап көрөлү. "BC" датасын түзүү үчүн сиз Calendar.Era талаасын колдонушуңуз керек.Мисалы, Ганнибал Рим армиясын талкалаган Канна согушун көрсөткөн датаны түзөлү. Бул биздин заманга чейинки 216-жылдын 2-августунда болгон. д.:
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
Мына ушундай. Java дата форматындагы мүмкүнчүлүктөрүбүздү колдонуп, сиз аны эч кыйынчылыксыз өзүңүзгө өзгөртсөңүз болот:
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
Бир топ жакшыраак, туурабы? :)
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION