Giriş
Şu satırı dahil ederiz.
Örüntü Sabitleri
SimpleDateFormat Örüntü Sabitleri yazısına taşıdım
constructor - Pattern
Şu satırı dahil ederiz.
import java.text.SimpleDateFormat;
SimpleDateFormat saat dilimi, yaz saati geçişi (DST), locale formatı bilgisine sahiptir. Bu sınıf abstract olan DateFormat sınıfından kalıtır. Şu satırı dahil ederiz.
import java.text.DateFormat;
Bu sınıf yerine Java 8 ile gelen DateTimeFormatter kullanılırsa daha iyi.
Örüntü Sabitleri
SimpleDateFormat Örüntü Sabitleri yazısına taşıdım
constructor - Pattern
Şöyle yaparız.
Belirtilen karakterler dikkate alınmaz. Genelde tarih ile ilgili olmayan gereksiz kısımlar süzmek için kullanılır.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
2. Tek tırnak içindeki karakterlerBelirtilen karakterler dikkate alınmaz. Genelde tarih ile ilgili olmayan gereksiz kısımlar süzmek için kullanılır.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss");
Date date = format.parse("2016.02.05 AD at 23:59:30");
constructor - Pattern + Locale
Format yanında Locale kullanılabilir. Şöyle yaparız.
Belirtilen Date nesnesini string'e çevirir. Şöyle yaparız.
Şöyle yaparız.
SimpleDateFormat sdf = new SimpleDateFormat("...", Locale.US);
Şöyle yaparızSimpleDateFormat sdf = new SimpleDateFormat("...", Locale.ENGLISH);
Şöyle yaparızSimpleDateFormat sdf = new SimpleDateFormat("...",Locale.getDefault());
format metodu - DateBelirtilen Date nesnesini string'e çevirir. Şöyle yaparız.
DateFormat sdf = new SimpleDateFormat("...");
Date date = new Date();
sdft.format (date);
Sadece gün-ay-yılı göstermek için şöyle yaparız.Date date = ...;
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
sdf.format (date);
Sadece saati göstermek için şöyle yaparız.Date date = ...;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.format (date);
AM/PM için şöyle yaparız.Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
String str = sdf.format(date);
Calendar ile çalışmak için şöyle yaparız.Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
dff.format (c.getTime());
getDateInstance metoduŞöyle yaparız.
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
Ya da belli bir locale veririz.DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY);
parse metodu - String
Belirtilen string'i tekrar Date nesnesine çevirir. ParseException atabilir. Şu satırı dahil ederiz.
Örnek
Elimizde şöyle bir kod olsun. Çıktı olarak 28 alırız
Sadece tarih ile şöyle yaparız.
Milisaniye ve time zone ile şöyle yaparız.
Lenient hoşgörülü demek. Açıklaması şöyle.
Bu sınıf setTimeZone () metodu çağrılmadan yaratılırsa JVM'in default time zone bilgisi ile ilklenir. Dolayısıyla farklı makinelerde farklı sonuçlar elde edebiliriz.
parse edilecek saat, sistem saat diliminden farklı ise önce saat dilimini atarız.
İmzası şöyle
import java.text.ParseException;
Bu metod yaz saati (DST) geçişlerinden haberdardır.Örnek
Elimizde şöyle bir kod olsun. Çıktı olarak 28 alırız
TimeUnit.DAYS.convert(
Math.abs(
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("30-03-2020 00:00:00").getTime() -
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("1-03-2020 00:00:00").getTime()
,
TimeUnit.MILLISECONDS)
Açıklaması şöyle. Yaz saatine geçince saatler 1 saat ileri alındığı için biz matematiksel olarak 29 gün geçmesini beklerken, UTC açısından 28 gün ve 23 saat geçmiştir.The problem is that because of Daylight Saving Time shift (on Sunday, March 8, 2020), there are 28 days and 23 hours between those dates. TimeUnit.DAYS.convert(...) truncates the result to 28 days.Düzeltmek için UTC saat dilimini kullanırız. Şöyle yaparız
SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
long diff = fmt.parse("30-03-2020 00:00:00").getTime() -
fmt.parse("1-03-2020 00:00:00").getTime();
Çıktı olarak şunu alırız.2505600000
Days: 29
Hours: 696
Days: 29.0
ÖrnekSadece tarih ile şöyle yaparız.
String myDob= "16/01/1989";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
date = sdf.parse (myDob);
} catch (ParseException e) {
// handle exception here !
}
ÖrnekMilisaniye ve time zone ile şöyle yaparız.
String myDob= "2017-08-16T00:00:00.000Z";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSSXXX");
Date date = null;
try {
date = sdf.parse (myDob);
} catch (ParseException e) {
// handle exception here !
}
setLenient metoduLenient hoşgörülü demek. Açıklaması şöyle.
Şöyle yaparız.Specify whether or not date/time parsing is to be lenient. With lenient parsing, the parser may use heuristics to interpret inputs that do not precisely match this object's format. With strict parsing, inputs must match this object's format.
format.setLenient (false);
setTimeZone metoduBu sınıf setTimeZone () metodu çağrılmadan yaratılırsa JVM'in default time zone bilgisi ile ilklenir. Dolayısıyla farklı makinelerde farklı sonuçlar elde edebiliriz.
parse edilecek saat, sistem saat diliminden farklı ise önce saat dilimini atarız.
sdf.setTimeZone (TimeZone.getTimeZone("America/New_York"));
GMT'ye göre formatlamak için şöyle yaparız.DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/hh-mm z");
sdf.setTimeZone (TimeZone.getTimeZone("GMT"));
UTC'ye göre formalamak için şöyle yaparız.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sdf.setTimeZone (TimeZone.getTimeZone("UTC"));
Daha sonra string'i parse ederiz.SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
isoFormat.setTimeZone (TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse ("2010-05-23T09:01:02");
toPatternİmzası şöyle
public String toPattern()
Açıklaması şöyleReturns a pattern string describing this date format.
Şöyle yaparız.SimpleDateFormat df = ...;
SimpleDateFormat df2 = new SimpleDateFormat(df.toPattern().replace("yy", "yyyy"));
çok teşekkürler
YanıtlaSil