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

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

جاوا کلاس 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 به عنوان حروف الگو رزرو شده اند، که مانند زیر تعریف شده اند:

Character

Description

Example

G

Era designator

AD

y

Year in four digits

۲۰۰۱

M

Month in year

July or 07

d

Day in month

۱۰

h

Hour in A.M./P.M. (1~12)

۱۲

H

Hour in day (0~23)

۲۲

m

Minute in hour

۳۰

s

Second in minute

۵۵

S

Millisecond

۲۳۴

E

Day in week

Tuesday

D

Day in year

۳۶۰

F

Day of week in month

۲ (second Wed. in July)

w

Week in year

۴۰

W

Week in month

۱

a

A.M./P.M. marker

PM

k

Hour in day (1~24)

۲۴

K

Hour in A.M./P.M. (0~11)

۱۰

z

Time zone

Eastern Standard Time

Escape for text

Delimiter

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("%1$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)

Character Description Example
c Complete date and time Mon May 04 09:51:52 CDT 2009
F ISO 8601 date ۲۰۰۴-۰۲-۰۹
D U.S. formatted date (month/day/year) ۰۲/۰۹/۲۰۰۴
T ۲۴-hour time ۱۸:۰۵:۱۹
r ۱۲-hour time ۰۶:۰۵:۱۹ pm
R ۲۴-hour time, no seconds ۱۸:۰۵
Y Four-digit year (with leading zeroes) ۲۰۰۴
y Last two digits of the year (with leading zeroes) ۰۴
C First two digits of the year (with leading zeroes) ۲۰
B Full month name February
b Abbreviated month name Feb
m Two-digit month (with leading zeroes) ۰۲
d Two-digit day (with leading zeroes) ۰۳
e Two-digit day (without leading zeroes) ۹
A Full weekday name Monday
a Abbreviated weekday name Mon
j Three-digit day of year (with leading zeroes) ۰۶۹
H Two-digit hour (with leading zeroes), between 00 and 23 ۱۸
k Two-digit hour (without leading zeroes), between 0 and 23 ۱۸
I Two-digit hour (with leading zeroes), between 01 and 12 ۰۶
l Two-digit hour (without leading zeroes), between 1 and 12 ۶
M Two-digit minutes (with leading zeroes) ۰۵
S Two-digit seconds (with leading zeroes) ۱۹
L Three-digit milliseconds (with leading zeroes) ۰۴۷
N Nine-digit nanoseconds (with leading zeroes) ۰۴۷۰۰۰۰۰۰
P Uppercase morning or afternoon marker PM
p Lowercase morning or afternoon marker pm
z RFC 822 numeric offset from GMT -۰۸۰۰
Z Time zone PST
s Seconds since 1970-01-01 00:00:00 GMT ۱۰۷۸۸۸۴۳۱۹
Q Milliseconds 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 == 0 ? "1818-11-11" : args[0]; 

      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); 
      }
   }
}

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

818-11-11 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(5*60*10); 
         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(5*60*10);
         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 می توانید به مستندات استاندارد جاوا مراجعه کنید.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *