tôi cần phải thay đổi định dạng ngày sử dụng Java từLàm cách nào để thay đổi định dạng ngày trong Java?
dd/MM/yyyy to yyyy/MM/dd
tôi cần phải thay đổi định dạng ngày sử dụng Java từLàm cách nào để thay đổi định dạng ngày trong Java?
dd/MM/yyyy to yyyy/MM/dd
Làm thế nào để chuyển đổi từ một định dạng ngày tháng khác sử dụng SimpleDateFormat:
final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";
// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;
SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d = sdf.parse(oldDateString);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
Sử dụng SimpleDateFormat
String DATE_FORMAT = "yyyy/MM/dd";
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
System.out.println("Formated Date " + sdf.format(date));
Ví dụ Complete:
import java.text.SimpleDateFormat;
import java.util.Date;
public class JavaSimpleDateFormatExample {
public static void main(String args[]) {
// Create Date object.
Date date = new Date();
// Specify the desired date format
String DATE_FORMAT = "yyyy/MM/dd";
// Create object of SimpleDateFormat and pass the desired date format.
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
/*
* Use format method of SimpleDateFormat class to format the date.
*/
System.out.println("Today is " + sdf.format(date));
}
}
tôi có thể vượt qua chuỗi cho đến nay không ?? – rasi
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.format(new Date());
này nên làm các trick
tôi có một chuỗi trong định dạng 'dd/MM/yyyy' làm cách nào tôi có thể chuyển đổi – rasi
Hoặc bạn có thể đi các tuyến đường regex:
String date = "10/07/2010";
String newDate = date.replaceAll("(\\d+)/(\\d+)/(\\d+)", "$3/$2/$1");
System.out.println(newDate);
Nó hoạt động cả hai cách quá. Tất nhiên điều này sẽ không thực sự xác nhận ngày của bạn và cũng sẽ làm việc cho các chuỗi như "21432/32423/52352". Bạn có thể sử dụng "(\\d{2})/(\\d{2})/(\\d{4}"
để chính xác hơn về số chữ số trong mỗi nhóm, nhưng nó sẽ chỉ hoạt động từ dd/MM/yyyy sang yyyy/MM/dd chứ không phải theo cách khác nữa (và vẫn chấp nhận số không hợp lệ trong đó 45). Và nếu bạn cho nó một cái gì đó không hợp lệ như "blabla" nó sẽ chỉ trả lại cùng một điều trở lại.
Bây giờ bạn có hai vấn đề. ;-) –
SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date myDate = newDateFormat.parse("28/12/2013");
newDateFormat.applyPattern("yyyy/MM/dd")
String myDateString = newDateFormat.format(myDate);
Bây giờ MyDate = 2013/12/28
LocalDate.parse(
"23/01/2017" ,
DateTimeFormatter.ofPattern("dd/MM/uuuu" , Locale.UK)
).format(
DateTimeFormatter.ofPattern("uuuu/MM/dd" , Locale.UK)
)
2017/01/23
answer by Christopher Parker là chính xác nhưng đã lỗi thời. Các lớp ngày giờ phiền hà cũ như java.util.Date
, java.util.Calendar
và java.text.SimpleTextFormat
hiện là legacy, được thay thế bởi các lớp java.time.
Phân tích chuỗi đầu vào làm đối tượng ngày giờ, sau đó tạo đối tượng Chuỗi mới theo định dạng mong muốn.
Lớp LocalDate
đại diện cho giá trị chỉ có ngày không có thời gian trong ngày và không có múi giờ.
DateTimeFormatter fIn = DateTimeFormatter.ofPattern("dd/MM/uuuu" , Locale.UK); // As a habit, specify the desired/expected locale, though in this case the locale is irrelevant.
LocalDate ld = LocalDate.parse("23/01/2017" , fIn);
Xác định trình định dạng khác cho đầu ra.
DateTimeFormatter fOut = DateTimeFormatter.ofPattern("uuuu/MM/dd" , Locale.UK);
String output = ld.format(fOut);
2017/01/23
Bằng cách này, xem xét sử dụng tiêu chuẩn định dạng ISO 8601 cho chuỗi đại diện cho các giá trị ngày thời gian.
Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date
, Calendar
, & SimpleDateFormat
.
Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.
Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.
Nơi lấy các lớp java.time?
Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval
, YearWeek
, YearQuarter
và more.
UPDATE: Dự án Joda-Time hiện đang ở maintenance mode, với đội ngũ tư vấn chuyển đổi sang các java.time lớp. Phần này ở đây để lại vì lợi ích của lịch sử.
Để giải trí, đây là mã của anh ấy được điều chỉnh để sử dụng thư viện Joda-Time.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;
final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";
// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;
DateTimeFormatter formatterOld = DateTimeFormat.forPattern(OLD_FORMAT);
DateTimeFormatter formatterNew = DateTimeFormat.forPattern(NEW_FORMAT);
LocalDate localDate = formatterOld.parseLocalDate(oldDateString);
newDateString = formatterNew.print(localDate);
Dump để an ủi ...
System.out.println("localDate: " + localDate);
System.out.println("newDateString: " + newDateString);
Khi chạy ...
localDate: 2010-08-12
newDateString: 2010/08/12
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(format1.format(date));
nhiều cách để thay đổi định dạng ngày
private final String dateTimeFormatPattern = "yyyy/MM/dd";
private final Date now = new Date();
final DateFormat format = new SimpleDateFormat(dateTimeFormatPattern);
final String nowString = format.format(now);
final Instant instant = now.toInstant();
final DateTimeFormatter formatter =
DateTimeFormatter.ofPattern(
dateTimeFormatPattern).withZone(ZoneId.systemDefault());
final String formattedInstance = formatter.format(instant);
/* Java 8 needed*/
LocalDate date = LocalDate.now();
String text = date.format(formatter);
LocalDate parsedDate = LocalDate.parse(text, formatter);
Để thay đổi định dạng của ngày bạn có yêu cầu cả hai định dạng nhìn bên dưới.
String stringdate1 = "28/04/2010";
try {
SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
Date date1 = format1.parse()
SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd");
String stringdate2 = format2.format(date1);
} catch (ParseException e) {
e.printStackTrace();
}
đây stringdate2
có định dạng ngày yyyy/MM/dd
. và nó chứa 2010/04/28
.
Đây chỉ là Christopher Parker answer thích nghi để sử dụng lớp mới từ Java 8:
final DateTimeFormatter OLD_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");
final DateTimeFormatter NEW_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String oldString = "26/07/2017";
LocalDate date = LocalDate.parse(oldString, OLD_FORMATTER);
String newString = date.format(NEW_FORMATTER);
1 tốt, không phải là mới nữa, Java 9 nên được phát hành sớm.
FYI, các lớp ngày giờ phiền hà cũ như ['java.util.Date'] (https://docs.oracle.com/ javase/8/docs/api/java/util/Date.html), ['java.util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar .html) và 'java.text.SimpleTextFormat' hiện là [legacy] (https://en.wikipedia.org/wiki/Legacy_system), được thay thế bởi [java.time] (https://docs.oracle. các lớp com/javase/8/docs/api/java/time/package-summary.html). Xem [Hướng dẫn của Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –