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

جاوا کلاس Dte موجود در بسته jv.util را ارائه داده است. این کلاس تاریخ و زمان جاری را کپسوله می کند.
کلاس Dteاز دو سازنده پشتیبانی می کند. این سازنده ها در جدول زیر نشان داده شده اند.


Sr.No.


Constructor ∓ Description


۱

Dte( )

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

Dte(long millisec)

این سازنده یک آرگومان می پذیرد  که برابر است با تعداد میلی ثانیه که از نیمه شب، ژانویه ۱، ۱۹۷۰ سپری شده است.


در زیر متدهای کلاس Dte آورده شده است.


Sr.No.

Metho ∓ Description


۱

boolen fter(Dte te)

اگر فراخوانی شی Dt حاوی یک تاریخ باشد که دیرتر از تاریخی است که توسط t  مشخص شده مقدار درست (true) بر می گرداند، در غیر این صورت، مقدار flse برمی گرداند
۲

boolen before(Dte te)

اگر فراخوانی شی Dt حاوی یک تاریخ زودتر از تاریخ مشخص شده توسط t باشد، درست (true) برمی گرداند ، در غیر این صورت، مقدار flse بر می گرداند.


۳

Object clone( )

فراخوانی شی Dt را تکرار می کند.
۴

int compreTo(Dte te)

مقدار شی فراخوانی شده را با t  مقایسه می کند. اگر مقادیر برابر باشند صفر برمی گرداند. اگر شی فراخوانی شده  زودتر از t یاشد یک مقدار منفی برمی گرداند. اگر شی فراخوانی شده  دیرتر از t باشد یک مقدار مثبت برمی گرداند.
۵

int compreTo(Object obj)

اگر obj از کلاس Dte باشد عینا compreTo(Dte) عمل می کند. در غیر این صورت، یک ClssCstException می اندازد.
۶

boolen equls(Object te)

اگر فراخوانی شی Dte  شامل همان زمان و تاریخی باشد که توسط te  مشخص شده است true برمی گرداند ، در غیر این صورت، مقدار flse بر می گرداند.
۷

long getTime( )

تعداد میلی ثانیه که از ۱ ژانویه ۱۹۷۰ سپری شده است را بر می گرداند.
۸

int hshCoe( )

یک کد هش برای شی فراخوانی بر می گرداند.
۹

voi setTime(long time)

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

String toString( )

شی  Dte فراخوانی شده را به رشته تبدیل می کند  و نتیجه را برمی گرداند.


بدست آوردن  Dte و Time فعلی در جاوا :

بدست آوردن تاریخ و زمان فعلی در < href="http://www.evelopzoom.com/%D8%AC%D8%A7%D9%88%D8%A7/">جاوا بسیار آسان است. شما می توانید یک شی Dte ساده با متد ()toString برای چاپ تاریخ و زمان فعلی به شرح زیر ا استفاده کنید.

مثال:

import jv.util.Dte;
public clss DteDemo 

   public sttic voi min(String rgs) 
      // Instntite  Dte object
      Dte te = new Dte();

      // isply time n te using toString()
      System.out.println(te.toString());
   

کد فوق نتیجه ی زیر را تولید خواهد کرد:
خروجی:
on My 04 09:5:52 CDT 2009

مقایسه تاریخ در جاوا

در زیر سه روش برای مقایسه دو تاریخ آورده شده است:

  • شما می توانید از ()getTime برای به دست آوردن تعداد میلی ثانیه که از نیمه شب، اول ژانویه ، ۱۹۷۰ سپری شده برای هر دو شی استفاده کنید، و سپس این دو مقدار را مقایسه کنید.
  • شما می توانید از متدهای before( ), fter( ) و equls( ) استفاده کنید. برای مثال چون ۱۲ام ماه قبل از ۱۸ می آید، بنابراین،
    new Dte(99, 2, 2).before(new Dte (99, 2, 8)) مقدار true برمی گرداند.
  • شما می توانید از متد ()compreTo استفاده کنید، که توسط رابط Comprble تعریف و بوسیله Dt اجرا شده می شود.

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

SimpleDteFormt یک کلاس برای قالب بندی و تجزیه تاریخ ها به یک شیوه حساس محلی است. SimpleDteFormt به شما اجازه می دهد تا شما با انتخاب هر الگوهای تعریف شده توسط کاربر برای te-time formttingشروع کنید.

مثال:

import jv.util.*;
import jv.text.*;

public clss DteDemo 

   public sttic voi min(String rgs) 
      Dte Now = new Dte( );
      SimpleDteFormt ft = 
      new SimpleDteFormt ("E yyyy.MM. 't' hh:mm:ss  zzz");

      System.out.println("Current Dte: " + ft.formt(Now));
   

کد فوق نتیجه ی زیر را تولید خواهد کرد:
خروجی:
Current Dte: Sun 2004.07.8 t 04:4:09 PM PDT

کدهای ساده فرمت DteFormt

برای مشخص کردن فرمت زمان، از یک رشته الگوی زمان استفاده کنید. در این الگو، تمام حروف ASCII به عنوان حروف الگو رزرو شده اند، که مانند زیر تعریف شده اند:


Chrcter


Description


Exmple


G


Er esigntor


AD


y


Yer in four igits


۲۰۰۱


M


Month in yer


July or 07



Dy in month


۱۰


h


Hour in A.M./P.M. (~2)


۱۲


H


Hour in y (0~23)


۲۲


m


Minute in hour


۳۰


s


Secon in minute


۵۵


S


Millisecon


۲۳۴


E


Dy in week


Tuesy


D


Dy in yer


۳۶۰


F


Dy of week in month


۲ (secon We. in July)


w


Week in yer


۴۰


W


Week in month


۱



A.M./P.M. mrker


PM


k


Hour in y (~24)


۲۴


K


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


۱۰


z


Time zone


Estern Stnr Time


̺


Escpe for text


Delimiter



Single quote


`



قالب بندی تاریخ با استفاده از تابع () printf

قالب بندی تاریخ و زمان می تواند به راحتی با استفاده از متد () printf انجام شود. شما می توانید از فرمت دو حرفی استفاده کنید. این فرمت  با t شروع می شود و با یکی از حروف ارائه شده در جدول زیر خاتمه می یابد به عنوان مثال:

import jv.util.Dte;
public clss DteDemo 

   public sttic voi min(String rgs) 
      // Instntite  Dte object
      Dte te = new Dte();

      // isply time n te using toString()
      String str = String.formt("Current Dte/Time : %tc", te );

      System.out.printf(str);
   

کد فوق نتیجه زیر را تولید خواهد کرد:
Current Dte/Time : St Dec 5 6:37:57 MST 202

این شما مجبور باشید برای فرمت هر بخش تاریخ را چندیین بار ارائه دهید ، ممکن است کمی احمقانه بنظر برسد. به همین دلیل، یک رشته فرمت می تواند ایندکس مربوط به آرگومان را نشان دهد تا قالب بندی شود.
ایندکس باید بلافاصله بعد از %بیاید و باید با علامت $ پایان داده شود.

import jv.util.Dte;
public clss DteDemo 

   public sttic voi min(String rgs) 
      // Instntite  Dte object
      Dte te = new Dte();
  
      // isply time n te using toString()
      System.out.printf("%$s %2$tB %2$t, %2$tY", "Due te:", te);
   

کد فوق خروجی زیر را تولید خواهد کرد:
Due te: Februry 09, 2004

همچنین، شما می توانید از flg استفاده کنید. این نشان می دهد که همان آرگومان در فرمت تعیین شده قبل باید دوباره استفاده شود.
مثال:

import jv.util.Dte;
public clss DteDemo 

   public sttic voi min(String rgs) 
      // Instntite  Dte object
      Dte te = new Dte();
  
      // isply formtte te
      System.out.printf("%s %tB %∓mp;mp;lt;te, %∓mp;mp;lt;tY", "Due te:", te);
   

کد فوق نتیجه زیر را تولید خواهد کرد:
خروجی
Due te: Februry 09, 2004

کاراکترهای تبدیل تاریخ و زمان در جاوا (Dte n Time)


Chrcter
Description
Exmple
c
Complete te n time
Mon My 04 09:5:52 CDT 2009
F
ISO 860 te
۲۰۰۴-۰۲-۰۹
D
U.S. formtte te (month/y/yer)
۰۲/۰۹/۲۰۰۴
T
۲۴-hour time
۱۸:۰۵:۱۹
r
۱۲-hour time
۰۶:۰۵:۱۹ pm
R
۲۴-hour time, no secons
۱۸:۰۵
Y
Four-igit yer (with leing zeroes)
۲۰۰۴
y
Lst two igits of the yer (with leing zeroes)
۰۴
C
First two igits of the yer (with leing zeroes)
۲۰
B
Full month nme
Februry
b
Abbrevite month nme
Feb
m
Two-igit month (with leing zeroes)
۰۲

Two-igit y (with leing zeroes)
۰۳
e
Two-igit y (without leing zeroes)
۹
A
Full weeky nme
Mony

Abbrevite weeky nme
Mon
j
Three-igit y of yer (with leing zeroes)
۰۶۹
H
Two-igit hour (with leing zeroes), between 00 n 23
۱۸
k
Two-igit hour (without leing zeroes), between 0 n 23
۱۸
I
Two-igit hour (with leing zeroes), between 0 n 2
۰۶
l
Two-igit hour (without leing zeroes), between n 2
۶
M
Two-igit minutes (with leing zeroes)
۰۵
S
Two-igit secons (with leing zeroes)
۱۹
L
Three-igit millisecons (with leing zeroes)
۰۴۷
N
Nine-igit nnosecons (with leing zeroes)
۰۴۷۰۰۰۰۰۰
P
Uppercse morning or fternoon mrker
PM
p
Lowercse morning or fternoon mrker
pm
z
RFC 822 numeric offset from GMT
-۰۸۰۰
Z
Time zone
PST
s
Secons since 970-0-0 00:00:00 GMT
۱۰۷۸۸۸۴۳۱۹
Q
Millisecons since 970-0-0 00:00:00 GMT
۱۰۷۸۸۸۴۳۱۹۰۴۷


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

تجزیه رشته ها به تاریخ ها در جاوا

کلاس SimpleDteFormt چند متد اضافی، به ویژه prse را دارد، که تلاش می کند یک رشته را با توجه به فرمت های ذخیره شده در شی SimpleDteFormt داده شده، تجزیه کند.

مثال:

import jv.util.*;
import jv.text.*;
  
public clss DteDemo 

   public sttic voi min(String rgs) 
      SimpleDteFormt ft = new SimpleDteFormt ("yyyy-MM-"); 
      String input = rgs.length == 0 ? "88--" : rgs[0]; 

      System.out.print(input + " Prses s "); 
      Dte t;
      try 
         t = ft.prse(input); 
         System.out.println(t); 
      ctch (PrseException e)  
         System.out.println("Unprseble using " + ft); 
      
   

اجرا برنامه فوق نتیجه زیر را تولید خواهد کرد:
خروجی
۸۸– Prses s We Nov 00:00:00 EST 88

خواب برای مدتی در جاوا

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

import jv.util.*;
public clss SleepDemo 

   public sttic voi min(String rgs) 
      try  
         System.out.println(new Dte( ) + "n"); 
         Thre.sleep(5*60*0); 
         System.out.println(new Dte( ) + "n"); 
      ctch (Exception e) 
         System.out.println("Got n exception!"); 
      
   

برنامه فوق نتیجه زیر را تولید خواهد کرد:
خروجی
un My 03 8:04:4 GMT 2009
Sun My 03 8:04:5 GMT 2009

اندازه گیری زمان سپری شده در جاوا

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

import jv.util.*;
public clss DiffDemo 

   public sttic voi min(String rgs) 
      try 
         long strt = System.currentTimeMillis( );
         System.out.println(new Dte( ) + "n");
         
         Thre.sleep(5*60*0);
         System.out.println(new Dte( ) + "n");
         
         long en = System.currentTimeMillis( );
         long iff = en - strt;
         System.out.println("Difference is : " + iff);
      ctch (Exception e) 
         System.out.println("Got n exception!");
      
   

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

Sun My 03 8:6:5 GMT 2009
Sun My 03 8:6:57 GMT 2009
Difference is : 5993

کلاس GregorinClenr (تقویم میلادی)

GregorinClenr یک پیاده سازی از کلاس Clenr است که تقویم میلادی نرمال که باذ آن آشنا هستید را پیاده سازی می کند. ما در این آموزش کلاس Clenr بررسی نمی کنیم، شما می توانید در این مورد به مستندات استاندارد جاوا مراجعه کنید.

متد ()getInstnce از Clenr یک GregorinClenr را باز می گرداند که با تاریخ و زمان فعلی در محل و منطقه زمانی پیشفرض مقداردهی اولیه شده است. GregorinClenr دو فیلد AD و BC را تعریف می کند. این دو پارامتر نشان دهنده دو دوره تعریف شده توسط تقویم میلادی است.
همچنین چندین سازنده برای شی GregorinClenr وجود دارد.


Sr.No.


Metho ∓ Description


۱

voi (int fiel, int mount)

بر اساس قوانین تقویم مقدار مشخص از زمان را به فیلد زمان داده شده می افزاید.
۲

protecte voi computeFiels()

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

protecte voi computeTime()

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

boolen equls(Object obj)

GregorinClenr را با یک شی مرجع مقایسه می کند.
۵

int get(int fiel)

یک مقدار برای فیلد زمان داده شده می دهد.
۶

int getActulMximum(int fiel)

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

int getActulMinimum(int fiel)

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

int getGretestMinimum(int fiel)

بیشترین مقدار minimum را برای فیلد داده شده اگر متفاوت باشد بر می گرداند.
۹

Dte getGregorinChnge()

تاریخ تغییر تقویم میلادی را می دهد.
۱۰

int getLestMximum(int fiel)

کمترین مقدار mximum را برای فیلد داده شده بر می گرداند اگر متفاوت باشد.
۱۱

int getMximum(int fiel)

بیشترین مقدار برای فیلد داده شده را بر می گرداند.
۱۲

Dte getTime()

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

long getTimeInMillis()

زمان فعلی این تقویم به عنوان long می شود.
۱۴

TimeZone getTimeZone()

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

int getMinimum(int fiel)

کمترین مقدار برای فیلد داده شده را برمی گرداند.
۱۶

int hshCoe()

hshCoe. را لغو می کند.
۱۷

boolen isLepYer(int yer)

اگر سال داده شده کبیسه باشد آن را مشخص می کند.
۱۸

voi roll(int fiel, boolen up)

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

voi set(int fiel, int vlue)

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

voi set(int yer, int month, int te)

مقادیر را برای فیلدهای yer  و  monthو te تنظیم می کند.
۲۱

voi set(int yer, int month, int te, int hour, int minute)

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

voi set(int yer, int month, int te, int hour, int minute, int secon)

مقادیری برای فیلدهای yer، month، te، hour ، minute و secon تنظیم می کند.
۲۳

voi setGregorinChnge(Dte te)

تاریخ تغییر GregorinClenr را تنظیم می کند.
۲۴

voi setTime(Dte te)

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

voi setTimeInMillis(long millis)

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

voi setTimeZone(TimeZone vlue)

منطقه زمانی (TimeZone) را به مقدار منطقه زمانی داده شده تنظیم می کند.
۲۷

String toString()

نمایش رشته ای از این تقویم را برمی گرداند.


مثال:

import jv.util.*;
public clss GregorinClenrDemo 

   public sttic voi min(String rgs) 
      String months = "Jn", "Feb", "Mr", "Apr", "My", "Jun", "Jul", "Aug", "Sep", 
         "Oct", "Nov", "Dec";
      
      int yer;
      // Crete  Gregorin clenr initilize
      // with the current te n time in the
      // efult locle n timezone.
      
      GregorinClenr gclenr = new GregorinClenr();
      
      // Disply current time n te informtion.
      System.out.print("Dte: ");
      System.out.print(months[gclenr.get(Clenr.MONTH)]);
      System.out.print(" " + gclenr.get(Clenr.DATE) + " ");
      System.out.println(yer = gclenr.get(Clenr.YEAR));
      System.out.print("Time: ");
      System.out.print(gclenr.get(Clenr.HOUR) + ":");
      System.out.print(gclenr.get(Clenr.MINUTE) + ":");
      System.out.println(gclenr.get(Clenr.SECOND));

      // Test if the current yer is  lep yer
      if(gclenr.isLepYer(yer)) 
         System.out.println("The current yer is  lep yer");
      else 
         System.out.println("The current yer is not  lep yer");
      
   

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


Dte: Apr 22 2009
Time: :25:27
The current yer is not lep yer

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

< href="http://www.evelopzoom.com/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-%DB%8C%D8%A7%D8%B2%D8%AF%D9%87%D9%85/">منبع