JavaRush /Java блогы /Random-KK /Уақытты қалай жоғалтпауға болады - DateTime және Calendar...

Уақытты қалай жоғалтпауға болады - DateTime және Calendar

Топта жарияланған
Сәлеметсіз бе! Бүгін біз бұрын кездеспеген жаңа деректер түрімен, атап айтқанда күндермен жұмыс істей бастаймыз. Уақытты қалай жоғалтпауға болады - DateTime және Calendar - 1Күннің не екенін түсіндірудің қажеті жоқ деп ойлаймын :) Негізінде Java тілінде ағымдағы күн мен уақытты кәдімгі жолда жазу әбден мүмкін.
public class Main {
   public static void main(String[] args) {

       String date = "June 11, 2018";
       System.out.println(date);
   }
}
Бірақ бұл тәсілдің көптеген кемшіліктері бар. Сынып Stringмәтінмен жұмыс істеу үшін құрылған және оның тиісті әдістері бар. Егер бізге күнді қандай да бір жолмен басқару қажет болса (мысалы, оған 2 сағат қосыңыз), ол Stringмұнда жұмыс істемейді. Немесе, мысалы, консольге бағдарлама құрастырылған уақыттағы ағымдағы күн мен уақытты көрсетіңіз. Бұл жерде Stringде көмектеспейді: codeты жазып, оны іске қосқан кезде уақыт өзгереді және консольде маңызды емес нәрсе көрсетіледі. Сондықтан Java-да оны жасаушылар күндер мен уақыттармен жұмыс істеуге арналған бірнеше сыныптар берді. Біріншісі - сыныпjava.util.Date

Java күн класы

Біз оның толық атауын бердік, себебі Java-да басқа пакетте де класс бар java.sql.Date. Шатасып кетпеңіз! Бұл туралы білуіңіз керек бірінші нәрсе - ол 1970 жылдың 1 қаңтарынан бері өткен күнді миллисекундтарда сақтайды . Бұл күннің тіпті бөлек атауы бар - «Unix time». Өте қызықты әдіс, келісесіз бе? Date:) Есте сақтау керек екінші нәрсе: егер сіз бос конструктормен нысан жасасаңыз , нәтиже нысан жасалған уақыттағы ағымдағы күн мен уақыт болады . Күн пішімі үшін Stringмұндай тапсырма қиындық тудыратыны туралы қалай жазғанымыз есіңізде ме? Сынып Dateоны оңай шешеді.
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 - «Мәскеудегі жазғы жарық» (Мәскеу жазғы уақыты). Миллисекундтар форматта беріледі long, өйткені олардың саны көбінесе сәйкес келмейді int. Сонымен, жұмысымызда қандай дата операциялары қажет болуы мүмкін? Ең айқын нәрсе, әрине, салыстыру . Бір күннің екіншісінен кеш немесе ертерек болғанын анықтаңыз. Мұны әртүрлі жолдармен жасауға болады. Мысалы, Date.getTime()1970 жылдың 1 қаңтарында түн ортасынан бері өткен миллисекундтар санын қайтаратын әдісті шақыруға болады. Оны екі 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! Өйткені, ол әрбір күн үшін 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 веб-сайтында сыныпқа арналған құжаттаманы ашсаңыз Date, оның көптеген әдістері мен конструкторлары («ескірген») ретінде белгіленгенін көресіз Deprecated. Міне, қараңыз: Класс күні Java жасаушылардың өздері ескірген сынып бөліктері туралы былай дейді: « @Deprecated түсіндірмесі бар бағдарлама элементі әдетте қауіпті болғандықтан немесе сол себепті бағдарламашылар пайдаланудан бас тартқан нәрсе. жақсырақ балама бар». Бұл бұл әдістерді мүлдем қолдануға болмайды дегенді білдірмейді. Date.getHours()Сонымен қатар, егер сіз codeты IDEA жүйесінде оларды пайдаланып іске қосуға тырыссаңыз, ол жұмыс істейтін болады.Мысалы , an objectінің сағат санын қайтаратын ескірген әдісті алайық Date.
public static void main(String[] args) {

   Date date1 = new Date();

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

}
Егер сіз codeты іске қосқан кезде, мысалы, уақыт 14:21 болса, ол 14 санын көрсетеді. Көріп отырғаныңыздай, ескірген әдіс сызылған, бірақ ол өте жақсы жұмыс істейді. Бұл әдістер олардың көмегімен жазылған codeтар жиынтығын бұзбау үшін толығымен жойылмады. Яғни, бұл әдістер «сынған» немесе «жойылған» емес, олар жай ғана ыңғайлы баламаның болуына байланысты пайдалану ұсынылмайды. Айтпақшы, бұл туралы құжаттамада дәл жазылған: Уақытты қалай жоғалтпауға болады - DateTime және Calendar - 2Date класының әдістерінің көпшілігі оның жақсартылған, кеңейтілген нұсқасына ауыстырылды - class Calendar. Біз онымен жақынырақ танысамыз :)

Java күнтізбесі

Java 1.1 жаңа класты енгізді - Calendar. Ол Java тіліндегі күндермен жұмыс істеуді бұрынғыға қарағанда біршама жеңілдетті. CalendarБіз жұмыс істейтін сыныптың жалғыз жүзеге асуы - бұл сынып GregorianCalendar(ол әлем елдерінің көпшілігі өмір сүретін Григориан күнтізбесін жүзеге асырады). Оның басты ыңғайлылығы – ол күндермен ыңғайлы форматта жұмыс істей алады. Мысалы, ол:
  • Ағымдағы күнге ай немесе күн қосыңыз
  • Жылдың кібісе жыл екенін тексеріңіз;
  • Жеке күн құрамдастарын алыңыз (мысалы, толық күннен бастап ай нөмірін алыңыз)
  • Сондай-ақ оның ішінде тұрақтылардың өте ыңғайлы жүйесі жасалған (олардың көбін төменде көреміз).
Класстың тағы бір маңызды айырмашылығы Calendar- ол тұрақты мәнді жүзеге асырады Calendar.Era: күнді б.з.д ( «Мәсіхке дейін» - Мәсіхтің туылуына дейін, яғни «біздің дәуірімізге дейін») немесе АС («Мәсіхтен кейін» - « біздің дәуір»). Мұның бәрін мысалдармен қарастырайық. 2017 жылдың 25 қаңтары күнімен күнтізбе құрайық:
public static void main(String[] args) {

  Calendar calendar = new GregorianCalendar(2017, 0 , 25);
}
Сыныптағы айлар Calendar(айтпақшы Date, сияқты) нөлден басталады, сондықтан біз екінші аргумент ретінде 0 санын тапсырдық. Сыныппен жұмыс істегенде ең бастысы - бұл күнтізбеCalendar екенін түсіну , бөлек күн емес. Күн - бұл белгілі бір уақыт кезеңін білдіретін сандар қатары. Ал күнтізбе - бұл күндермен көп нәрсені жасауға болатын тұтас құрылғы :) Бұл күнтізбе нысанын консольге шығаруға тырыссаңыз, анық көрінеді: Шығару: Уақытты қалай жоғалтпауға болады - 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). Егер жұмыс кезінде сізге күнтізбеден қарапайым күнді алу керек болса, яғни. нысан 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- және солай :) Барлық күнтізбе өрістерін (күн, ай, minutesтар, секундтар және т.б.) әдісі арқылы жеке орнатуға болады 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көптеген әдістер мен тұрақтылар бар , олар туралы құжаттамада оқыңыз:

Жолды Күнге түрлендіру

Жолды күнге түрлендіру үшін Java көмекші сыныбын пайдалануға болады - SimpleDateFormat . Бұл күнді өзіңіз анықтаған пішімге түрлендіру үшін қажет сынып. Уақытты қалай жоғалтпауға болады - DateTime және Calendar - 5Өз кезегінде, ол DateFormat форматына өте ұқсас . Екеуінің арасындағы бірден-бір елеулі айырмашылық SimpleDateFormat пішімдеу (күнді жолға түрлендіру) және жолды жергілікті тілге байланысты талдау үшін пайдаланылуы мүмкін, ал DateFormat тілді қолдамайды. Сонымен қатар, DateFormat - күндерді пішімдеу және талдау үшін негізгі қолдауды қамтамасыз ететін дерексіз класс, ал SimpleDateFormat - DateFormat сыныбын кеңейтетін нақты сынып. SimpleDateFormat нысанын жасау және Күнді пішімдеу мысалы келесідей:
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(1212121212121L);

System.out.println(formatter.format(date));
Жоғарыда келтірілген мысалда біз «жжжж-АА-кг СС:мм:сс» үлгісін қолдандық, ол мынаны білдіреді:
  • жыл үшін 4 сан (жжж);
  • ай үшін 2 сан (MM);
  • күн үшін 2 сан (dd);
  • 24 сағаттық форматтағы сағаттар үшін 2 сан (HH);
  • Минут үшін 2 сан (мм);
  • секунд үшін 2 сан (ss).
Бөлу белгілері мен өрнек таңбаларының реті сақталады. Консоль шығысы:
2008-05-30 08:20:12
SimpleDateFormat сыныбына арналған үлгі әріптері өте көп . Сізді шатастырмау үшін біз оларды кестеге жинадық:
Таңба Сипаттама Мысал
Г дәуір (ағылшын тілінде - AD және BC) AD
ж жыл (4 таңбалы сан) 2020
yy жыл (соңғы 2 сан) 20
жжжж жыл (4 таңбалы сан) 2020
М ай нөмірі (бастауыш нөлдерсіз) 8
ММ ай нөмірі (ай саны < 10 болса, алдыңғы нөлдермен) 04
МММ үш әріптік ай аббревиатурасы (локализацияға сәйкес) қаңтар
АААА толық ай атауы маусым
w жылдың аптасы (бастапқы нөлдерсіз) 4
ww жылдың аптасы (алдыңғы нөлдермен) 04
В айдағы апта (бастауыш нөлдерсіз) 3
WW айдағы апта (алдыңғы нөлмен) 03
D жылдың күні 67
г ай күні (бастауыш нөлдерсіз) 9
кк ай күні (алдыңғы нөлдермен) 09
Ф айдағы аптаның күні (бастауыш нөлдерсіз) 9
FF айдағы аптаның күні (бастапқы нөлдермен) 09
Е аптаның күні (аббревиатура) В
EEEE апта күні (толық) жұма
u апта күні нөмірі (бастауыш нөлдерсіз) 5
uu апта күнінің нөмірі (алдыңғы нөлдермен) 05
а AM/PM маркер А.М.
Х сағаттар 24 сағаттық форматта алдыңғы нөлдерсіз 6
HH алдыңғы нөлмен 24 сағаттық пішімдегі сағат 06
к 24 сағаттық форматтағы сағаттар саны 18
Қ 12 сағаттық форматтағы сағаттар саны 6
h уақыт 12 сағаттық форматта алдыңғы нөлдерсіз 6
сағ уақыт 12 сағаттық форматта алдыңғы нөлмен 06
м нөлсіз minutesтар 32
мм нөлмен minutes 32
с нөлсіз секунд он бір
сс нөлмен секунд он бір
С миллисекундтар 297
z сағаттық белдеу Шығыс Еуропа уақыты
З RFC 822 пішіміндегі уақыт белдеуі 300
Үлгі таңбаларының комбинацияларының мысалдары:
Үлгі Мысал
кк-АА-жжж 01.11.2020
жжж-АА-кк 10.01.2019 ж
СС:мм:сс.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 нысанын жасаймыз (әйтпесе оны талдай алмаймыз):

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

    Көріп отырғаныңыздай, бізде жергілікті аргумент бар. Егер біз оны өткізіп алсақ, ол әрқашан ағылшын тілінде емес, әдепкі жергілікті тілді пайдаланады.

    Егер тіл енгізу жолына сәйкес келмесе, біздің Mon немесе April сияқты тілге байланысты жол деректері танылмайды және үлгі сәйкес болса да 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 және Calendar

SimpleDateFormat кейін пайдалану үшін жасалған барлық Күн және Күнтізбе нысандарын пішімдеуге мүмкіндік береді. Дәуірлермен жұмыс жасау сияқты қызықты сәттерді қарастырайық. «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