تاریخ و زمان در جاوا
جاوا کلاس 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()); } }
کد فوق نتیجه ی زیر را تولید خواهد کرد:
خروجی:
مقایسه تاریخ در جاوا
در زیر سه روش برای مقایسه دو تاریخ آورده شده است:
- شما می توانید از ()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)); } }
کد فوق نتیجه ی زیر را تولید خواهد کرد:
خروجی:
کدهای ساده فرمت 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); } }
کد فوق نتیجه زیر را تولید خواهد کرد:
این شما مجبور باشید برای فرمت هر بخش تاریخ را چندیین بار ارائه دهید ، ممکن است کمی احمقانه بنظر برسد. به همین دلیل، یک رشته فرمت می تواند ایندکس مربوط به آرگومان را نشان دهد تا قالب بندی شود.
ایندکس باید بلافاصله بعد از %بیاید و باید با علامت $ پایان داده شود.
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); } }
کد فوق خروجی زیر را تولید خواهد کرد:
همچنین، شما می توانید از 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); } }
کد فوق نتیجه زیر را تولید خواهد کرد:
خروجی
کاراکترهای تبدیل تاریخ و زمان در جاوا (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); } } }
اجرا برنامه فوق نتیجه زیر را تولید خواهد کرد:
خروجی
خواب برای مدتی در جاوا
شما می توانید برای هر دوره از زمان از یک میلی ثانیه تا طول عمر کامپیوتر خود بخوابید. به عنوان مثال، برنامه زیر برای ۳ ثانیه به خواب می رود.
مثال:
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: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: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"); } } }
برنامه بالا خروجی زیر را تولید خواهد کرد:
خروجی
Time: 11:25:27
The current year is not a leap year