با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. در اغلب برنامه ها و توسعه ها ی نرم افزاری، نیاز است که از تمام یا بخشی از نمایش جاری تاریخ و ساعت سیستم استفاده کنید. تاریخ و ساعت جاری سیستم نه تنها برای نمایش در برنامه، بلکه در استفاده های گسترده ی زیادی دیگری از جمله ذخیره ی زمان ورود داده ها ،تاریخ و زمان رزرو و… کاربرد دارد. از این رو ما مباحث این آموزش را به آشنایی با تاریخ و زمان در جاوا و کاراکترهای تبدیل ساعت و تاریخ اختصاص داده ایم.
در ادامه به منظور آشنایی با تاریخ و زمان در جاوا شما را با چگونگی دستکاری تاریخ و ساعت فعلی و … آشنا می کنیم.
کلاس Date موجود در بسته java.util تاریخ و زمان فعلی سیستم را محاسبه می کند.
کلاس Date دو ساختار را پشتیبانی می کند که در جدول زیر نشان داده شده است:
ردیف | ساختار و توضیحات مربوطه |
---|---|
۱ | Date( ) این ساختار شیء را با تاریخ و زمان فعلی راه اندازی می کند. |
۲ | Date(long millisec) این ساختار یک تاریخ را بر اساس شروع از نیمه شب ۱ ژانویه ۱۹۷۰ محاسبه می کند. |
جدول زیر شامل متدهای کلاس date می باشد:
ردیف | متد و توضیحات |
---|---|
۱ | boolean after(Date date) اگر عنصر Data invocation حاوی تاریخ جاری باشد TRUE و در غیر این صورت FALSE است. |
۲ | boolean before(Date date) اگر عنصر Data invocation حاوی تاریخ جاری باشد TRUE و در غیر این صورت FALSE است. |
۳ | Object clone( ) تکرار شیء تاریخ |
۴ | int compareTo(Date date) تاریخ فعلی را با تاریخ دریافتی مقایسه کرده و نتیجه را برمی گرداند. |
۵ | int compareTo(Object obj) اگر object از کلاس Date باشد، مشابه با comparTo (Date) عمل می کند. |
۶ | boolean equals(Object date) اگر تاریخ فعلی با تاریخ مشخص شده برابر باشند TRUE و در غیر این صورت FALSE را بر می گرداند.
|
۷ | long getTime( ) تعداد از میلی ثانیه که از اول ژانویه ۱۹۷۰ سپری شده است را برمی گرداند. |
۸ | int hashCode( ) یک کد هش را برای شیء فراخوانی بازمی گرداند. |
۹ | void setTime(long time) زمان را از نیمه شب اول ژانویه ۱۹۷۰ محاسبه می کند. |
۱۰ | String toString( ) شیء تاریخ را به نوع رشته ای تبدیل می کند. |
یک متد بسیار آسان برای دریافت تاریخ و زمان فعلی در جاوا ارائه شده است.
شما می توانید از یک شی ساده Data با متد ()toString برای چاپ تاریخ و زمان فعلی به صورت زیر استفاده کنید:
مثال:
1 2 3 4 5 6 7 8 9 10 11 | 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()); } } |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود:
1 | on May 04 09:51:52 CDT 2009 |
در زیر سه روش برای مقایسه دو تاریخ وجود دارد:
SimpleDateFormat یک کلاس برای قالب بندی تاریخ تجزیه که حساس به زبان است.
SimpleDateFormat به شما اجازه می دهد از الگوهای مختلف برای نمایش تاریخ و ساعت استفاده کنید.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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)); } } |
خروجی کد فوق بصورت زیر خواهد بود:
1 | Current Date: Sun 2004.07.18 at 04:14:09 PM PDT |
برای تعیین فرمت نمایش تاریخ می توانیم از کاراکترهای خاصی به شرح جدول زیر استفاده کنیم:
کاراکتر | توضیحات | مثال |
---|---|---|
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 انجام داد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 String str = String.format("Current Date/Time : %tc", date ); System.out.printf(str); } } |
نتیجه ی اجرای کد فوق به صورت زیر خواهد بود:
1 | Current Date/Time : Sat Dec 15 16:37:57 MST 2012 |
همچنین می توانید با استفاده از عملگر % و $ بصورت زیر هر بخش تاریخ را بصورت جداگانه قالب بندی کنید:
مثال:
1 2 3 4 5 6 7 8 9 10 11 | 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 System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } } |
نتیجه ی اجرای کد فوق بصوتر زیر خواهد بود:
1 | Due date: February 09, 2004 |
همچنین می توانید از <flag> استفاده کنید.
مثال:
1 2 3 4 5 6 7 8 9 10 11 | 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); } } |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود:
1 | Due date: February 09, 2004 |
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 | ۱۰۷۸۸۸۴۳۱۹۰۴۷ |
Character Conversion Date و Time کلاس های مفید دیگر مربوط به تاریخ و زمان هستند.
کلاس SimpleDateFormat دارای برخی از متدهای اضافی، به ویژه ()parse است.
متد ()parse تلاش می کند یک رشته را بر اساس فرمت ذخیره شده در شیء SimpleDateFormat تجزیه کند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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); } } } |
نتیجه ی اجرای کد فوق در جاوا به شرح زیر است:
1 | 1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818 |
شما می توانید یک وقفه ی موقت در ساعت جاری ایجاد کنید.
مثال- ایجاد یک وقفه ی ۳ ثانیه ای :
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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!"); } } } |
نتیجه ی کد فوق بصورت زیر خواهد بود:
1 2 | Sun May 03 18:04:41 GMT 2009 Sun May 03 18:04:51 GMT 2009 |
گاهی اوقات ممکن است نیاز به اندازه گیری نقطه در زمان در میلی ثانیه باشد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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!"); } } } |
خروجی :
1 2 3 | Sun May 03 18:16:51 GMT 2009 Sun May 03 18:16:57 GMT 2009 Difference is : 5993 |
کلاس GregorianCalendar یک نمونه از تقویم بنیادی است.
متد ( )getInstance یک تقویم GregorianCalendar را با تاریخ و زمان فعلی در منقطه ی پیش فرض محلی تنظیم می کند.
جدول زیر شامل ساختارهای شیء GregorianCalendar می باشد:
ردیف | ساختار و توضیحات |
---|---|
۱ | GregorianCalendar() GregorianCalendar تقویم را با زمان جاری سیستم در محل مورد نظر ایجاد می کند. |
۲ | GregorianCalendar(int year, int month, int date) ایجاد یک GregorianCalendar با تاریخ داده شده تنظیم شده در منطقه زمانی پیش فرض. |
۳ | GregorianCalendar(int year, int month, int date, int hour, int minute) یک GregorianCalendar با تاریخ و زمان مشخص شده برای منطقه زمانی پیش فرض محلی ایجاد می کند. |
۴ | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) یک GregorianCalendar با تاریخ و زمان مشخص شده برای منطقه زمانی پیش فرض محلی ایجاد می کند. |
۵ | GregorianCalendar(Locale aLocale) یک GregorianCalendar را بر اساس زمان فعلی در منطقه زمانی پیش فرض محلی داده شده ایجاد می کند. |
۶ | GregorianCalendar(TimeZone zone) یک GregorianCalendar را بر اساس زمان فعلی در منطقه زمانی داده شده با پیش فرض محلی ایجاد می کند. |
۷ | GregorianCalendar(TimeZone zone, Locale aLocale) یک GregorianCalendar را بر اساس زمان فعلی در منطقه زمانی داده شده با زبان داده شده ایجاد می کند. |
جدول زیر شامل لیستی از چند متد پشتیبانی مفید ارائه شده توسط کلاس GregorianCalendar است:
ردیف | متد و توضیحات |
---|---|
۱ | 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) اگر متغیر باشد، بالاترین مقدار حداقل برای فیلد داده را نشان می دهد. |
۹ | Date getGregorianChange() تاریخ تغییر تقویم را می گیرد. |
۱۰ | int getLeastMaximum(int field) حداقل مقداری که حداکثر فیلد است را نشان می دهد. |
۱۱ | int getMaximum(int field) حداکثر مقدار یک فیلد را نشان می دهد.
|
۱۲ | Date getTime() زمان جاری سیستم را برمی گرداند. |
۱۳ | long getTimeInMillis() زمان فعلی تقویم را بصورت طولانی نمایش می دهد. |
۱۴ | TimeZone getTimeZone() منطقه زمانی فعلی را می دهد. |
۱۵ | int getMinimum(int field) حداقل مقدار برای فیلد داده را برمی گرداند. |
۱۶ | int 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) مقادیر برای فیلدها سال، ماه و تاریخ را تنظیم می کند. |
۲۱ | void set(int year, int month, int date, int hour, int minute) مقادیر را برای سال، ماه، تاریخ، ساعت و دقیقه تنظیم می کند. |
۲۲ | void set(int year, int month, int date, int hour, int minute, int second) مقادیر را برای سال، ماه، تاریخ، ساعت و دقیقه تنظیم می کند. |
۲۳ | void setGregorianChange(Date date) تاریخ تقویم GregorianCalendar را تغییر می دهد. |
۲۴ | void setTime(Date date) تاریخ فعلی تقویم را با تاریخ داده شده تنظیم می کند. |
۲۵ | void setTimeInMillis(long millis) زمان فعلی تقویم را از مقدار طولانی داده شده تنظیم می کند. |
۲۶ | void setTimeZone(TimeZone value) منطقه زمانی را با مقدار منطقه زمان داده شده تنظیم می کند. |
۲۷ | String toString() نمایش رشته ای تقویم را بازمی گرداند |
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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"); } } } |
خروجی کد فوق بصورت زیر خواهد بود:
1 2 3 | Date: Apr 22 2009 Time: 11:25:27 The current year is not a leap year |
بسیاری از زبان های برنامه نویسی امکان دسترسی به تاریخ و ساعت فعلی سیستم و دستکاری آن را در کد برنامه برای برنامه نویسان فراهم می کند. جاوا نیز به عنوان یک زبان برنامه نویسی محبوب از این قاعده مستثنی نیست. از این رو مباحث این بخش را به آشنایی با تاریخ و زمان در جاوا اختصاص دادیم.