ویرایش: 1396/11/13 16:40
A
A
تبدیل رشته (String) به تاریخ (Date) در جاوا
در این آموزش، نحوه ی تبدیل رشته (String) به java.util.Date را نشان خواهیم داد. بسیاری از افرادی که تازه شروع به یادگیری جاوا می کنند، در تبدیل تاریخ به مشکل بر می خورند، امیدواریم این آموزش کمکی برای این افراد باشد.
// String -> Date
SimpleDateFormat.parse(String);
// Date -> String
SimpleDateFormat.format(date);
در جدول زیر برخی از الگوهای تاریخ و زمان استفاده شده در java.text.SimpleDateFormat نشان داده شده است:
حرف | توضیح | مثال |
---|---|---|
y | سال | 2013 |
M | ماه در سال | July, 07, 7 |
d | روز در ماه | 1-31 |
E | نام روز در هفته | Friday, Sunday |
a | علامت پیش و بعد از ظهر | AM, PM |
H | ساعت در روز | 0-23 |
h | ساعت در AM/PM | 1-12 |
m | دقیقه در ساعت | 0-60 |
s | ثانیه در دقیقه | 0-60 |
رشته: 7-Jun-2013
در صورت بکار بردن 3 حرف 'M'، ماه به صورت (Mon-Dec) تفسیر می شود، در غیر اینصورت به شکل عدد (01-12) خواهد بود.
package org.amoozesh.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateExample1 {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String dateInString = "7-Jun-2013";
try {
Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
خروجی:
Fri Jun 07 00:00:00 MYT 2013
07-Jun-2013
رشته: 07/06/2013
package org.amoozesh.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateExample2 {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateInString = "07/06/2013";
try {
Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
خروجی
Fri Jun 07 00:00:00 MYT 2013
07/06/2013
رشته: Fri, June 7 2013
package org.amoozesh.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateExample3 {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("E, MMM dd yyyy");
String dateInString = "Fri, June 7 2013";
try {
Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
خروجی
Fri Jun 07 00:00:00 MYT 2013
Fri, Jun 07 2013
رشته: Friday, Jun 7, 2013 12:10:56 PM
package org.amoozesh.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateExample4 {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("EEEE, MMM dd, yyyy HH:mm:ss a");
String dateInString = "Friday, Jun 7, 2013 12:10:56 PM";
try {
Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
رشته: 2014-10-05T15:23:01Z
پسوند Z به معنای UTC می باشد، java.utile.SimpleDateFormat آن را به درستی parse نمی کند، نیاز است که پسوند Z با ' 0000' جا به جا شود.
package org.amoozesh.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateExample5 {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String dateInString = "2014-10-05T15:23:01Z";
try {
Date date = formatter.parse(dateInString.replaceAll("Z$", " 0000"));
System.out.println(date);
System.out.println("time zone : " TimeZone.getDefault().getID());
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
خروجی:
Sun Oct 05 23:23:01 MYT 2014
time zone : Asia/Kuala_Lumpur
2014-10-05T23:23:01 0800
در جاوا نسخه 8، می توانید آن را به شیء java.time.Instance تبدیل کرده، و آن را با یک time zome مشخص نمایش دهید.
package org.amoozesh.date;
import java.time.*;
public class TestDateExample6 {
public static void main(String[] argv) {
String dateInString = "2014-10-05T15:23:01Z";
Instant instant = Instant.parse(dateInString);
System.out.println(instant);
//get date time only
LocalDateTime result = LocalDateTime.ofInstant(instant, ZoneId.of(ZoneOffset.UTC.getId()));
System.out.println(result);
//get date time timezone
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Africa/Tripoli"));
System.out.println(zonedDateTime);
//get date time timezone
ZonedDateTime zonedDateTime2 = instant.atZone(ZoneId.of("Europe/Athens"));
System.out.println(zonedDateTime2);
}
}
خروجی:
2014-10-05T15:23:01Z
2014-10-05T15:23:01
2014-10-05T17:23:01 02:00[Africa/Tripoli]
2014-10-05T18:23:01 03:00[Europe/Athens]