کلاس Date

کلاس Date کلاسی از جاوا است که در پکیج java.util قرار دارد و به شما اجازه استفاده، ذخیره، و دستکاری ساعت و تاریخ را می دهد. این کلاس دارای متدهایی برای دستکاری تاریخ مانند اضافه و کم کردن روزها، ماه ها، یا سال ها و مطابق کردن آنها با تاریخ جاری را می دهند. همچنین دارای متدهایی است که تاریخ را به اشکال متفاوتی نشان می دهند. کد زیر نحوه استفاده از کلاس Date را نشان می دهد.

package program;

import java.util.*;

public class Program 
{
    public static void main(String[] args) 
    {
        Date today  = new Date();
        System.out.print(today );
    }   
}
Wed Jul 08 17:52:38 IRDT 2015

در این مثال تاریخ و ساعتی که بنده این آموزش را قرار داده ام نمایش داده شده است. همانطور که در کد بالا مشاهده می کنید برای استفاده از این کلاس باید پکیج مربوطه (java.util) را با کلمه کلیدی import وارد برنامه کنید. کلاس Date دارای چندین متد است که در زیر کاربرد آنها نشان داده شده است :

متد توضیحات
after() مقدار true را در صورتی که تاریخ سیستم بعد از تاریخ داده شده بصورت پارامتر باشد برمی گرداند.
before() مقدار true را در صورتی که تاریخ سیستم قبل از تاریخ داده شده بصورت پارامتر باشد برمی گرداند.
clone() برای کپی کردن شی تعریف شده.
compareTo() مقایسه تاریع سیستم با تاریخ پارامتر. در صورتی که برابر باشند مقدار 0 در صورتی که تاریخ سیستم قبل باشد مقدار منفی و در صورتی که بعد باشد مقدار مثبت بر می گرداند.
compareTo() چک می کند که آیا کلاس داده شده در پارامتر از نوع تاریخ هست یا نه .
equals() مقایسه تاریخ موجود با تاریخ و زمان پارامتر و بازگشت مقدار true در صورت برابر بودن.
getTime() بازگرداندن تعداد میلی ثانیه از تاریخ 1 ژانویه 1970.
hashCode( ) بازگرداندن کد هش شده شی تعریف شده .
setTime() تنظیم زمان با دادن تعداد میلی ثانیه از 1 ژانویه 1970

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

package program;

import java.util.*;

public class Program 
{
    public static void main(String[] args) 
    {                 
        System.out.println(new Date(2010).after(new Date(2015)));
        System.out.println(new Date(2010).before(new Date(2015)));
        System.out.println(new Date().clone());
        System.out.println(new Date(2010).compareTo(new Date(2015)));
        System.out.println(new Date(2010).equals(new Date(2015)));
        System.out.println(new Date().getTime());
        System.out.println(new Date().hashCode()); 
    }  
}
false
true
Wed Jul 08 18:44:03 IRDT 2015
-1
false
1436364843809
1845766767

قالب بندی تاریخ

برای قالب بندی یا نمایش دلخواه تاریخ در جاوا هم می توان از متد ()printf و هم از کلاس SimpleDateFormat استفاده کرد. قبل از خواندن ادامه آموزش توصیه می شود که ابتدا این پست را بخوانید.

قالب بندی تاریخ با متد printf

هنگامی که یک شئ Date ایجاد می کنیم برای نمایش تاریخ و زمان به صورت سفارشی می توان از متد ()printf و کارکترهای خاصی که در جدول زیر لیست شده اند استفاده کرد:

کاراکتر توضیح مثال
c نمایش تاریخ و زمان بصورت کامل Mon May 04 09:51:52 CDT 2015
F نمایش تاریخ با فرمت iso 8601 2004-02-09
D نمایش تاریخ با فرمت (month/day/year) 10/09/2015
T نمایش زمان با فرمت 24 ساعته 19:25:19
r نمایش زمان با فرمت 12 ساعته 10:05:20 pm
R نمایش زمان با فرمت 24 ساعته بدون ثانیه 20:05
Y نمایش سال با 4 رقم 2015
y نمایش سال با 2 رقم آخر 06
C نمایش 2 رقم اول سال 20
B نمایش نام کامل ماه February
b نمایش خلاصه شده نام ماه Feb
m نمایش ماه با 2 رقم 04
d نمایش روز با 2 رقم 07
e نمایش روز بودن عدد 0 درصورت یک رقمی بودن 7
A نمایش نام کامل روز در هفته Monday
a نمایش نام اختصاری روز در هفته Mon
j نمایش شماره 3 رقمی روز در سال 071
H نمایش شماره 2 رقمی نشان دهنده ساعت در فرمت 24 ساعته 00 تا 24 19
k نمایش ساعت بدون گذاشتن 0 قبل از ساعت یک رقمی 0 تا 23 17
I شماره 2 رقمی نشان دهنده ساعت در فرمت 12 ساعته 00 تا 12 07
l نمایش ساعت بودن گذاشتن 0 قبل از ساعت یک رقمی 0 تا 12 7
M نمایش دقیقه 2 رقمی 07
S نمایش دقیقه بدون گذاشتن 0 قبل از آن درصورت 1 رقمی بودن 20
L نمایش 3 رقمی میلی ثانیه 051
N نمایش 9 رقمی نانو ثانیه 051000000
P نمایش نوع زمان بصورت حروف بزرگ PM
p نمایش نوع زمان با حروف کوچک pm
z نمایش عددی انحراف از زمان واحد GMT -0800
Z منطقه زمانی PST
s تعداد ثانیه ها از تاریخ 1970/1/1 1084524320
Q تعداد میلی ثانیه از زمان 00:00:00 GMT سال 1970/01/01 1052334319051

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

Date today =  new Date();

System.out.printf("%tY",  today);
2015

در مثال بالا از %tY برای قالب بندی تاریخ استفاده کرده ایم. قالب بندی همیشه با علامت % شروع می شود. حرف t بعد از آن به معنای آن است که ما می خواهیم یک مقدار زمانی را قالب بندی کنیم و حرف Y هم، همانطور که در جدول مشاهده می کنید برای نمایش سال به صورت چهار رقمی است. حال فرض کنید که می خواهیم یک زمان را به صورت کامل نمایش دهیم :

Date today =  new Date();

System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due Today : ",  today);
Due Today :  July 08, 2015

همانطور که در کد بالا مشاهده می کنید Due Today : یک رشته است و اولین آرگومان بعد از رشته قالب بندی شده، در نتیجه از %1$s برای قالب بندی آن استفاده کرده ایم. عدد یک به معنای اولین آرگومان، علامت $ محدود کننده است و برای قالب بندی های چند بخشی کاربرد دارد یا به عبارت دیگر اندیس آرگومانها باید در داخل دو علامت $% قرار بگیرد. علامت s کوچک هم به معنای رشته می باشد. دومین آرگومان بعد از رشته قالب بندی شده هم به صورت سه بخشی قرار است نمایش داده شود پس هر بخش با %2$t شروع و بعد از این عبارت هم یکی از کاراکترهای موجود در جدول بالا آمده است. t به معنای تاریخ است.

قالب بندی تاریخ با کلاس SimpleDateFormat

کلاس SimpleDateFormat هم که در پکیج java.text قرار دارد با دریافت کاراکترهای خاصی تاریخ را فرمت بندی می کند. لیست کاراکترهایی که می توانیم به سازنده این کلاس بدهیم در جدول زیر آمده است :

کاراکتر توضیحات مثال
G نوع فرمت تاریخ AD
y چهاررقم سال 2015
M نام یا شماره ماه در سال July or 07
d روز در ماه 12
h ساعت در فرمت 12 ساعته 10
H ساعت در فرمت 24 ساعته 22
m دقیقه از ساعت 30
s ثانیه از دقیقه 55
S میلی ثانیه 234
E نام روز هفته Tuesday
D روز در سال 360
F روز از هفته در ماه 2 (second Wed. in July)
w هفته از سال 40
W هفته از ماه 1
a نوشتن قبل یا بعد ظهر PM
k ساعت از روز 24 ساعته 24
K ساعت از روز 12 ساعته 10
z منطقه زمانی Eastern Standard Time
نمایش متن Delimiter
نمایش تک کوتیشن `

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

Date today = new Date();
SimpleDateFormat SDF = new SimpleDateFormat ("E yyyy.MM.dd  'at' hh:mm:ss a zzz");

System.out.println("Current Date: " +  SDF.format(today));
Current Date: Wed 2015.07.08  at 10:39:19 PM IRDT