آموزش برنامه نویسی جاوا – قسمت یازدهم – تاریخ و زمان در جاوا

0
873

آموزش برنامه نویسی جاوا – قسمت یازدهم – تاریخ و زمان در جاوا

 

تاریخ و زمان در جاوا

جاوا کلاس Date موجود در بسته java.util را ارائه داده است. این کلاس تاریخ و زمان جاری را کپسوله می کند.
کلاس Dateاز دو سازنده پشتیبانی می کند. این سازنده ها در جدول زیر نشان داده شده اند.

Sr.No.Constructor & Description
۱Date( )

این سازنده شی را با با تاریخ و زمان فعلی مقدار دهی اولیه  می کند.

۲Date(long millisec)

این سازنده یک آرگومان می پذیرد  که برابر است با تعداد میلی ثانیه که از نیمه شب، ژانویه ۱، ۱۹۷۰ سپری شده است.

در زیر متدهای کلاس Date آورده شده است.

Sr.No.Method & Description
۱boolean after(Date date)

اگر فراخوانی شی Data حاوی یک تاریخ باشد که دیرتر از تاریخی است که توسط data  مشخص شده مقدار درست (true) بر می گرداند، در غیر این صورت، مقدار false برمی گرداند

۲boolean before(Date date)

اگر فراخوانی شی Data حاوی یک تاریخ زودتر از تاریخ مشخص شده توسط data باشد، درست (true) برمی گرداند ، در غیر این صورت، مقدار false بر می گرداند.

۳Object clone( )

فراخوانی شی Data را تکرار می کند.

۴int compareTo(Date date)

مقدار شی فراخوانی شده را با data  مقایسه می کند. اگر مقادیر برابر باشند صفر برمی گرداند. اگر شی فراخوانی شده  زودتر از data یاشد یک مقدار منفی برمی گرداند. اگر شی فراخوانی شده  دیرتر از data باشد یک مقدار مثبت برمی گرداند.

۵int compareTo(Object obj)

اگر obj از کلاس Date باشد عینا compareTo(Date) عمل می کند. در غیر این صورت، یک ClassCastException می اندازد.

۶boolean equals(Object date)

اگر فراخوانی شی Date  شامل همان زمان و تاریخی باشد که توسط date  مشخص شده است true برمی گرداند ، در غیر این صورت، مقدار false بر می گرداند.

۷long getTime( )

تعداد میلی ثانیه که از ۱ ژانویه ۱۹۷۰ سپری شده است را بر می گرداند.

۸int hashCode( )

یک کد هش برای شی فراخوانی بر می گرداند.

۹void setTime(long time)

زمان و تاریخ که  توسط زمان مشخص شده اند را تنظیم می کند، که زمان سپری شده به میلی ثانیه از نیمه شب، اول ژانویه ۱۹۷۰ را نشان می دهد.

۱۰String toString( )

شی  Date فراخوانی شده را به رشته تبدیل می کند  و نتیجه را برمی گرداند.

بدست آوردن  Date و Time فعلی در جاوا :

بدست آوردن تاریخ و زمان فعلی در جاوا بسیار آسان است. شما می توانید یک شی Date ساده با متد ()toString برای چاپ تاریخ و زمان فعلی به شرح زیر ا استفاده کنید.

مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
      // display time and date using toString()
      System.out.println(date.toString());
   }
}

کد فوق نتیجه ی زیر را تولید خواهد کرد:
خروجی:

on May 04 09:51:52 CDT 2009

مقایسه تاریخ در جاوا

در زیر سه روش برای مقایسه دو تاریخ آورده شده است:

  • شما می توانید از ()getTime برای به دست آوردن تعداد میلی ثانیه که از نیمه شب، اول ژانویه ، ۱۹۷۰ سپری شده برای هر دو شی استفاده کنید، و سپس این دو مقدار را مقایسه کنید.
  • شما می توانید از متدهای before( ), after( ) و equals( ) استفاده کنید. برای مثال چون ۱۲ام ماه قبل از ۱۸ می آید، بنابراین،
    new Date(99, 2, 12).before(new Date (99, 2, 18)) مقدار true برمی گرداند.
  • شما می توانید از متد ()compareTo استفاده کنید، که توسط رابط Comparable تعریف و بوسیله Data اجرا شده می شود.

فرمت یا قالب بندی تاریخ در جاوا با استفاده از SimpleDateFormat

SimpleDateFormat یک کلاس برای قالب بندی و تجزیه تاریخ ها به یک شیوه حساس محلی است. SimpleDateFormat به شما اجازه می دهد تا شما با انتخاب هر الگوهای تعریف شده توسط کاربر برای date-time formattingشروع کنید.

مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
import java.util.*;
import java.text.*;
public class DateDemo {
   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft =
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      System.out.println("Current Date: " + ft.format(dNow));
   }
}

کد فوق نتیجه ی زیر را تولید خواهد کرد:
خروجی:

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

کدهای ساده فرمت DateFormat

برای مشخص کردن فرمت زمان، از یک رشته الگوی زمان استفاده کنید. در این الگو، تمام حروف ASCII به عنوان حروف الگو رزرو شده اند، که مانند زیر تعریف شده اند:

CharacterDescriptionExample
GEra designatorAD
yYear in four digits۲۰۰۱
MMonth in yearJuly or 07
dDay in month۱۰
hHour in A.M./P.M. (1~12)۱۲
HHour in day (0~23)۲۲
mMinute in hour۳۰
sSecond in minute۵۵
SMillisecond۲۳۴
EDay in weekTuesday
DDay in year۳۶۰
FDay of week in month۲ (second Wed. in July)
wWeek in year۴۰
WWeek in month۱
aA.M./P.M. markerPM
kHour in day (1~24)۲۴
KHour in A.M./P.M. (0~11)۱۰
zTime zoneEastern Standard Time
Escape for textDelimiter
Single quote`

قالب بندی تاریخ با استفاده از تابع () printf

قالب بندی تاریخ و زمان می تواند به راحتی با استفاده از متد () printf انجام شود. شما می توانید از فرمت دو حرفی استفاده کنید. این فرمت  با t شروع می شود و با یکی از حروف ارائه شده در جدول زیر خاتمه می یابد به عنوان مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
      // display time and date using toString()
      String str = String.format("Current Date/Time : %tc", date );
      System.out.printf(str);
   }
}

کد فوق نتیجه زیر را تولید خواهد کرد:

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

این شما مجبور باشید برای فرمت هر بخش تاریخ را چندیین بار ارائه دهید ، ممکن است کمی احمقانه بنظر برسد. به همین دلیل، یک رشته فرمت می تواند ایندکس مربوط به آرگومان را نشان دهد تا قالب بندی شود.
ایندکس باید بلافاصله بعد از %بیاید و باید با علامت $ پایان داده شود.

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display time and date using toString()
      System.out.printf("%۱$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}

کد فوق خروجی زیر را تولید خواهد کرد:

Due date: February 09, 2004

همچنین، شما می توانید از flag استفاده کنید. این نشان می دهد که همان آرگومان در فرمت تعیین شده قبل باید دوباره استفاده شود.
مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
import java.util.Date;
public class DateDemo {
   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display formatted date
      System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
   }
}

کد فوق نتیجه زیر را تولید خواهد کرد:
خروجی

Due date: February 09, 2004

کاراکترهای تبدیل تاریخ و زمان در جاوا (Date and Time)

CharacterDescriptionExample
cComplete date and timeMon May 04 09:51:52 CDT 2009
FISO 8601 date۲۰۰۴-۰۲-۰۹
DU.S. formatted date (month/day/year)۰۲/۰۹/۲۰۰۴
T۲۴-hour time۱۸:۰۵:۱۹
r۱۲-hour time۰۶:۰۵:۱۹ pm
R۲۴-hour time, no seconds۱۸:۰۵
YFour-digit year (with leading zeroes)۲۰۰۴
yLast two digits of the year (with leading zeroes)۰۴
CFirst two digits of the year (with leading zeroes)۲۰
BFull month nameFebruary
bAbbreviated month nameFeb
mTwo-digit month (with leading zeroes)۰۲
dTwo-digit day (with leading zeroes)۰۳
eTwo-digit day (without leading zeroes)۹
AFull weekday nameMonday
aAbbreviated weekday nameMon
jThree-digit day of year (with leading zeroes)۰۶۹
HTwo-digit hour (with leading zeroes), between 00 and 23۱۸
kTwo-digit hour (without leading zeroes), between 0 and 23۱۸
ITwo-digit hour (with leading zeroes), between 01 and 12۰۶
lTwo-digit hour (without leading zeroes), between 1 and 12۶
MTwo-digit minutes (with leading zeroes)۰۵
STwo-digit seconds (with leading zeroes)۱۹
LThree-digit milliseconds (with leading zeroes)۰۴۷
NNine-digit nanoseconds (with leading zeroes)۰۴۷۰۰۰۰۰۰
PUppercase morning or afternoon markerPM
pLowercase morning or afternoon markerpm
zRFC 822 numeric offset from GMT-۰۸۰۰
ZTime zonePST
sSeconds since 1970-01-01 00:00:00 GMT۱۰۷۸۸۸۴۳۱۹
QMilliseconds since 1970-01-01 00:00:00 GMT۱۰۷۸۸۸۴۳۱۹۰۴۷

کلاس های مفید دیگری مربوط به تاریخ و زمان وجود دارد. برای اطلاعات بیشتر، شما می توانید به مستندات استاندارد جاوا مراجعه کنید.

تجزیه رشته ها به تاریخ ها در جاوا

کلاس SimpleDateFormat چند متد اضافی، به ویژه parse را دارد، که تلاش می کند یک رشته را با توجه به فرمت های ذخیره شده در شی SimpleDateFormat داده شده، تجزیه کند.

مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
import java.util.*;
import java.text.*;
  
public class DateDemo {
   public static void main(String args[]) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
      String input = args.length == ۰ ? "۱۸۱۸-۱۱-۱۱" : args[۰];
      System.out.print(input + " Parses as ");
      Date t;
      try {
         t = ft.parse(input);
         System.out.println(t);
      }catch (ParseException e) {
         System.out.println("Unparseable using " + ft);
      }
   }
}

اجرا برنامه فوق نتیجه زیر را تولید خواهد کرد:
خروجی

۸۱۸-۱۱-۱۱ Parses as Wed Nov 11 00:00:00 EST 1818

خواب برای مدتی در جاوا

شما می توانید برای هر دوره از زمان از یک میلی ثانیه تا طول عمر کامپیوتر خود بخوابید. به عنوان مثال، برنامه زیر برای ۳ ثانیه به خواب می رود.
مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
import java.util.*;
public class SleepDemo {
   public static void main(String args[]) {
      try {
         System.out.println(new Date( ) + "\n");
         Thread.sleep(۵*۶۰*۱۰);
         System.out.println(new Date( ) + "\n");
      }catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

برنامه فوق نتیجه زیر را تولید خواهد کرد:
خروجی

un May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

اندازه گیری زمان سپری شده در جاوا

گاهی اوقات، ممکن است نیاز به اندازه گیری یک نقطه زمان به میلی ثانیه داشته باشید. بنابراین اجازه دهید مثال بالا را یک بار دیگر باز نویسی کنیم.
مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
import java.util.*;
public class DiffDemo {
   public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         
         Thread.sleep(۵*۶۰*۱۰);
         System.out.println(new Date( ) + "\n");
         
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      }catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

برنامه فوق خروجی زیر را تولید خواهد کرد:
خروجی

Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

کلاس GregorianCalendar (تقویم میلادی)

GregorianCalendar یک پیاده سازی از کلاس Calendar است که تقویم میلادی نرمال که باذ آن آشنا هستید را پیاده سازی می کند. ما در این آموزش کلاس Calendar بررسی نمی کنیم، شما می توانید در این مورد به مستندات استاندارد جاوا مراجعه کنید.

متد ()getInstance از Calendar یک GregorianCalendar را باز می گرداند که با تاریخ و زمان فعلی در محل و منطقه زمانی پیشفرض مقداردهی اولیه شده است. GregorianCalendar دو فیلد AD و BC را تعریف می کند. این دو پارامتر نشان دهنده دو دوره تعریف شده توسط تقویم میلادی است.
همچنین چندین سازنده برای شی GregorianCalendar وجود دارد.

Sr.No.Method & Description
۱void add(int field, int amount)

بر اساس قوانین تقویم مقدار مشخص از زمان را به فیلد زمان داده شده می افزاید.

۲protected void computeFields()

UTC در میلی ثانیه را به مقادیر فیلد زمان تبدیل می کند.

۳protected void computeTime()

تبدیل مقدار فیلد زمان تقویم به به UTC در میلی ثانیه را لغو می کند.

۴boolean equals(Object obj)

GregorianCalendar را با یک شی مرجع مقایسه می کند.

۵int get(int field)

یک مقدار برای فیلد زمان داده شده می دهد.

۶int getActualMaximum(int field)

حداکثر مقدار که این فیلد می تواند داشته باشد، با توجه به تاریخ جاری را برمی گرداند.

۷int getActualMinimum(int field)

حداقل مقدار که این فیلد می تواند داشته باشد، با توجه به تاریخ جاری را برمی گرداند.

۸int getGreatestMinimum(int field)

بیشترین مقدار minimum را برای فیلد داده شده اگر متفاوت باشد بر می گرداند.

۹Date getGregorianChange()

تاریخ تغییر تقویم میلادی را می دهد.

۱۰int getLeastMaximum(int field)

کمترین مقدار maximum را برای فیلد داده شده بر می گرداند اگر متفاوت باشد.

۱۱int getMaximum(int field)

بیشترین مقدار برای فیلد داده شده را بر می گرداند.

۱۲Date getTime()

زمان جاری این تقویم را به دست می آورد.

۱۳long getTimeInMillis()

زمان فعلی این تقویم به عنوان long می شود.

۱۴TimeZone getTimeZone()

منطقه زمانی را بدست می آورد.

۱۵int getMinimum(int field)

کمترین مقدار برای فیلد داده شده را برمی گرداند.

۱۶int hashCode()

hashCode. را لغو می کند.

۱۷boolean isLeapYear(int year)

اگر سال داده شده کبیسه باشد آن را مشخص می کند.

۱۸void roll(int field, boolean up)

یک واحد از زمان را به فیلد زمان ارائه شده اضافه یا کم می کند. بدون اینکه در فیلدهای  بزرگتر تغییری ایجاد شود.

۱۹void set(int field, int value)

فیلد زمان را با مقدار داده شده تنظیم می کند.

۲۰void set(int year, int month, int date)

مقادیر را برای فیلدهای year  و  monthو date تنظیم می کند.

۲۱void set(int year, int month, int date, int hour, int minute)

مقادیری برای فیلدهای year، month، date، hour و minute تنظیم می کند.

۲۲void set(int year, int month, int date, int hour, int minute, int second)

مقادیری برای فیلدهای year، month، date، hour ، minute و second تنظیم می کند.

۲۳void setGregorianChange(Date date)

تاریخ تغییر GregorianCalendar را تنظیم می کند.

۲۴void setTime(Date date)

زمان فعلی تقویم را از مقدار تاریخ داده شده تنظیم می کند.

۲۵void setTimeInMillis(long millis)

زمان فعلی تقویم را از مقدار long داده شده تنظیم می کند.

۲۶void setTimeZone(TimeZone value)

منطقه زمانی (TimeZone) را به مقدار منطقه زمانی داده شده تنظیم می کند.

۲۷String toString()

نمایش رشته ای از این تقویم را برمی گرداند.

مثال:

۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
۲۰
۲۱
۲۲
۲۳
۲۴
۲۵
۲۶
۲۷
۲۸
۲۹
۳۰
۳۱
۳۲
import java.util.*;
public class GregorianCalendarDemo {
   public static void main(String args[]) {
      String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
         "Oct", "Nov", "Dec"};
      
      int year;
      // Create a Gregorian calendar initialized
      // with the current date and time in the
      // default locale and timezone.
      
      GregorianCalendar gcalendar = new GregorianCalendar();
      
      // Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));
      // Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }else {
         System.out.println("The current year is not a leap year");
      }
   }
}

برنامه بالا خروجی زیر را تولید خواهد کرد:
خروجی

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

برای مشاهده لیست کاملی از ثابت های در دسترس کلاس Calendar می توانید به مستندات استاندارد جاوا مراجعه کنید.

منبع بیتوته beytoote.com

ارسال یک پاسخ

لطفا دیدگاه خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید