کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Java-تاریخ و زمان در جاوا

 

جاوا متغیر گروه Date را در پوشه ی java.util  ارائه می دهد. این گروه تاریخ و زمان جاری را کپسوله می کند (encapsulate).

گروه Date دو سازنده را پشتیبانی می کند. اولین سازنده آبجکت را با تاریخ و زمان جاری مقدار دهی می کند.

Date( )

 

سازنده ی بعدی یک argument را می پذیرد که برابر تعداد هزارم ثانیه هایی است که از نیمه شب اول ژانویه ی 1970 گذشته است.

Date(long millisec)

 

زمانی که شما یک Date object در دسترس دارید، می توانید برای بازی با تاریخ ها هرکدام از متودهای پشتیبانی زیر را فرا بخوانید:

 

1

 

SN

Methods with Description

boolean after(Date date)

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

2

boolean before(Date date)

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

3

Object clone( )

فراخوانی Date object را تکرار می کند.

4

int compareTo(Date date)

مقدار فراخوانی آبجکت را با مقدار مربوط به تاریخ مقایسه می کند. اگر مقادیر برابر باشند، 0 گزارش می دهد. اگر آبجکت فراخوانی زودتر از تاریخ باشد، یک مقدار منفی گزارش می دهد. اگر آبجکت فراخوانی دیرتر از تاریخ باشد، یک مقدار مثبت گزارش می دهد.

5

int compareTo(Object obj)

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

6

boolean equals(Object date)

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

7

long getTime( )

تعداد هزارم ثانیه هایی را که از اول ژانویه ی 1970 سپری شده، نشان می دهد.

8

int hashCode( )

یک کد hash برای فراخوانی آبجکت گزارش می دهد.

9

void setTime(long time)

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

10

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

   }

}

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

Mon May 04 09:51:52 CDT 2009

 

مقایسه ی تاریخ:

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

·         می توانید برای تعیین تعداد هزارم ثانیه هایی که از نیمه شب اول ژانویه ی 1970 گذشته است، برای هر دو آبجکت، از getTime( )   استفاده کنید و سپس این دو مقدار را با یکدیگر مقایسه کنید.

·         می توانید از متودهای before( ), after( ),  و  equals( ) استفاده کنید. به عنوان مثال از آنجایی که دوازدهم ماه قبل از هجدهم می آید، عبارت جدید before( ), after( ), and equals( )  دارای گزارش true می باشد.

·         شما می توانید از متود compareTo( ) استفاده کنید که توسط اینترفیس Comparable  تعریف شده و به وسیله ی Date اجرا می شود.

طراحی تاریخ با استفاده از SimpleDateFormat:

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

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

سال چهار رقمی

2001

M

Month in year

ماه در سال

July or 07

d

Day in month

روز در ماه

10

h

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

ساعت در صبح / بعد از ظهر

12

H

Hour in day (0~23)

ساعت در روز

22

m

Minute in hour

دقیقه در ساعت

30

s

Second in minute

ثانیه در دقیقه

55

S

Millisecond

هزارم ثانیه

234

E

Day in week

روز در هفته

Tuesday

D

Day in year

روز در سال

360

F

Day of week in month

روز هفته در ماه

2 (second Wed. in July)

w

Week in year

هفته در سال

40

W

Week in month

هفته در ماه

1

a

A.M./P.M. marker

نشانگر قبل از ظهر / بعد از ظهر

PM

k

Hour in day (1~24)

ساعت در روز

24

K

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

ساعت قبل از ظهر / بعد از ظهر

10

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

 

اگر مجبور باشید برای طراحی هر بخش، تاریخ را چند بار ارائه دهید، ممکن است کمی احمقانه به نظر برسد. به همین دلیل یک رشته می تواند ایندکس مربوط به argument را نشان دهد تا طراحی شود.

ایندکس باید فورا با %  دنبال شود و با $ پایان یابد. برای مثال:

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

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 %<>,

                         "Due date:", date);

   }

}

 

این مثال نتیجه ی زیر را به دنبال دارد:

Due date: February 09, 2004

 

کاراکترهای تبدیل Date و Time:

 

Character

Description

Example

c

Complete date and time

تاریخ و زمان کامل

Mon May 04 09:51:52 CDT 2009

F

ISO 8601 date

2004-02-09

D

U.S. formatted date (month/day/year)

فرمت امریکایی تاریخ

02/09/2004

T

24-hour time

زمان 24 ساعت

18:05:19

r

12-hour time

زمان 12 ساعت

06:05:19 pm

R

24-hour time, no seconds

زمان 24 ساعت، بدون ثانیه

18:05

Y

Four-digit year (with leading zeroes)

زمان چهار رقمی با صفر

2004

y

Last two digits of the year (with leading zeroes)

دو رقم آخر سال ( با صفر)

04

C

First two digits of the year (with leading zeroes)

دو رقم اول سال (با صفر)

20

B

Full month name

نام کامل ماه

February

b

Abbreviated month name

نام اختصاری ماه

Feb

m

Two-digit month (with leading zeroes)

ماه دو رقمی ( با صفر)

02

d

Two-digit day (with leading zeroes)

روز دو رقمی (با صفر)

03

e

Two-digit day (without leading zeroes)

روز دو رقمی (بدون صفر)

9

A

Full weekday name

نام کامل روز های هفته

Monday

a

Abbreviated weekday name

نام اختصاری روزهای هفته

Mon

j

Three-digit day of year (with leading zeroes)

روز سه رقمی سال (با صفر)

069

H

Two-digit hour (with leading zeroes), between 00 and 23

ساعت دو رقمی (با صفر) بین 00 و 23.

18

k

Two-digit hour (without leading zeroes), between 0 and 23

ساعت دو رقمی (بدون صفر)، بین 0 و 23

18

I

Two-digit hour (with leading zeroes), between 01 and 12

ساعت دو رقمی (با صفر)، بین 01 و 12.

06

l

Two-digit hour (without leading zeroes), between 1 and 12

ساعت دو رقمی (بدون صفر)، بین 1 و 12.

6

M

Two-digit minutes (with leading zeroes)

دقیقه ی دو رقمی (با صفر)

05

S

Two-digit seconds (with leading zeroes)

ثانیه ی دو رقمی (با صفر)

19

L

Three-digit milliseconds (with leading zeroes)

هزارم ثانیه سه رقمی (با صفر)

047

N

Nine-digit nanoseconds (with leading zeroes)

نانو ثانیه نه رقمی (با صفر)

047000000

P

Uppercase morning or afternoon marker

نشانگر صبح یا بعداز ظهر با حروف بزرگ

PM

p

Lowercase morning or afternoon marker

نشانگر صبح یا بعداز ظهر با حروف کوچک

pm

z

RFC 822 numeric offset from GMT

افست عددی RFC 822  از GMT

-0800

Z

Time zone

منطقه ی زمانی

PST

s

Seconds since 1970-01-01 00:00:00 GMT

1078884319

Q

Milliseconds since 1970-01-01 00:00:00 GMT

1078884319047

 

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

تجزیه ی رشته ها به تاریخ ها:

گروه 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);

      }

   }

}

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

$ java DateDemo

1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818

$ java DateDemo 2007-12-01

2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

 

خوابیدن برای مدتی:

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

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!");

      }

   }

}

این مثال نتیجه ی زیر را به دنبال دارد:

Sun 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 است که یک تقویم میلادی معمولی را که با آن آشنا هستید، اجرا می کند. من در مورد گروه Calander در این آموزش بحث نکردم، شما می توانید در این مورد مستندسازی استاندارد جاوا را مورد بررسی قرار دهید.

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

چندین سازنده برای آبجکت های GregorianCalendar وجود دارد:

 

SN

Constructor with Description

1

GregorianCalendar()

با استفاده از زمان حاضر در منطقه ی زمانی پیش فرض با محل پیش فزض، یک GregorianCalendar  پیش فرض می سازد.

2

GregorianCalendar(int year, int month, int date)

یک GregorianCalendar  پیش فرض با تاریخ تنظیم شده ی ارائه شده در منطقه ی زمانی پیش فرض با محل پیش فرض، یک GregorianCalendar  می سازد.

3

GregorianCalendar(int year, int month, int date, int hour, int minute)
Constructs a GregorianCalendar with the given date and time set for the default time zone with the default locale.

با تاریخ و زمان ارائه شده برای منطقه ی زمانی پیش فرض در محل پیش فرض، یک GregorianCalendar  می سازد.

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

با تاریخ و زمان تنظیم شده برای منطقه ی زمانی پیش فرض در محل پیش فرض، یک GregorianCalendar  می سازد.

5

GregorianCalendar(Locale aLocale)

براساس زمان کنونی در منطقه ی زمانی پیش فرض با محل پیش فرض، یک GregorianCalendar  می سازد.

6

GregorianCalendar(TimeZone zone)

براساس زمان کنونی در منطقه ی زمانی پیش فرض با محل پیش فرض، یک GregorianCalendar  می سازد.

7

GregorianCalendar(TimeZone zone, Locale aLocale)

براساس زمان کنونی در منطقه ی زمانی پیش فرض با محل پیش فرض، یک GregorianCalendar  می سازد.

 

در اینجا لیستی از متودهای مفید ارائه شده توسط گروه GregorianCalendar را مشاهده می کنید:

 

SN

Methods with Description

1

void add(int field, int amount)

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

2

protected void computeFields()

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

3

protected void computeTime()

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

4

boolean equals(Object obj)

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

5

int get(int field)

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

6

int getActualMaximum(int field)

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

7

int getActualMinimum(int field)

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

8

int getGreatestMinimum(int field)

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

9

Date getGregorianChange()

تاریخ تغییر Gregorian Calendar را به دست می آورد.

10

int getLeastMaximum(int field)

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

11

int getMaximum(int field)

مقدار حداکثر را برای فیلد ارائه شده گزارش می دهد.

12

Date getTime()

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

13

long getTimeInMillis()

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

14

TimeZone getTimeZone()

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

15

int getMinimum(int field)

حداقل مقدار را برای فیلد ارائه شده گزارش می دهد.

16

int hashCode()

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

17

boolean isLeapYear(int year)

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

18

void roll(int field, boolean up)

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

19

void set(int field, int value)


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

20

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

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

21

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

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

22

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

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

23

void setGregorianChange(Date date)

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

24

void setTime(Date date)

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

25

void setTimeInMillis(long millis)

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

26

void setTimeZone(TimeZone value)

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

27

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

 

 

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

 

1394/07/27 15481 0
نظرات شما

نظرات خود را ثبت کنید...