mọingày・thời giansợi dâyjava.util.Date、java.util.CalendarChuyển đổi sang
Trong Java, tất cảChuỗi ngày giờNếu có thể, java.util.Calendar 、 java.util.Date Đây là một chương trình mẫu để chuyển đổi sang một kiểu dữ liệu.
Quá trình chuyển đổi trước tiên định dạng ngày và giờ thành chuỗi ngày giờ mặc định, và sau đó... java.util.Calendar Chuyển đổi sang kiểu dữ liệu. Một ngoại lệ IllegalArgumentException sẽ được ném ra nếu việc chuyển đổi không thể thực hiện được.
Cũng,java.util.Date Để chuyển đổi sang kiểu dữ liệu chính xác, hãy sử dụng phương thức getTime() của lớp Calendar.
Các định dạng ngày tháng sau đây có thể chuyển đổi cho nhau:
Chương trình mẫu
int yyyy = Integer.parseInt(strDate.substring(0,4));
int MM = Integer.parseInt(strDate.substring(5,7));
int dd = Integer.parseInt(strDate.substring(8,10));
int HH = cal.get(Calendar.HOUR_OF_DAY);
int mm = cal.get(Calendar.MINUTE);
int ss = cal.get(Calendar.SECOND);
int SSS = cal.get(Calendar.MILLISECOND);
cal.clear();
cal.set(yyyy,MM-1,dd);
int len = strDate.length();
công tắc (len) {
Trường hợp 10:
phá vỡ;
trường hợp 16: // yyyy/MM/dd HH:mm
HH = Integer.parseInt(strDate.substring(11,13));
mm = Integer.parseInt(strDate.substring(14,16));
cal.set(Calendar.HOUR_OF_DAY,HH);
cal.set(Calendar.MINUTE, mm);
phá vỡ;
trường hợp 19: //yyyy/MM/dd HH:mm:ss
HH = Integer.parseInt(strDate.substring(11,13));
mm = Integer.parseInt(strDate.substring(14,16));
ss = Integer.parseInt(strDate.substring(17,19));
cal.set(Calendar.HOUR_OF_DAY,HH);
cal.set(Calendar.MINUTE, mm);
cal.set(Calendar.SECOND,ss);
phá vỡ;
trường hợp 23: //yyyy/MM/dd HH:mm:ss.SSS
HH = Integer.parseInt(strDate.substring(11,13));
mm = Integer.parseInt(strDate.substring(14,16));
ss = Integer.parseInt(strDate.substring(17,19));
SSS = Integer.parseInt(strDate.substring(20,23));
cal.set(Calendar.HOUR_OF_DAY,HH);
cal.set(Calendar.MINUTE, mm);
cal.set(Calendar.SECOND,ss);
cal.set(Calendar.MILLISECOND,SSS);
phá vỡ;
mặc định:
ném ngoại lệ IllegalArgumentException mới(
“Chuỗi đối số[" + strDate +
“"] không thể chuyển đổi thành chuỗi ngày tháng."
}
trả về cal;
}
/**
* Nhiều chuỗi ngày giờ khác nhau ở định dạng ngày giờ mặc định
Chuyển đổi sang *.
*
* Định dạng ngày tháng mặc định như sau:
* Chỉ áp dụng cho định dạng ngày: yyyy/MM/dd
* Định dạng ngày + giờ: yyyy/MM/dd HH:mm:ss.SSS
*
* @param str Chuỗi cần chuyển đổi
* @return Định dạng ngày giờ mặc định
* @throwsIllegalArgumentException
* Nếu chuỗi ngày tháng không thể chuyển đổi
*/
private static String format(String str){
if (str == null || str.trim().length() < 8) {
ném ngoại lệ IllegalArgumentException mới(
“Chuỗi đối số[" + str +
“"] không thể chuyển đổi thành chuỗi ngày tháng."
}
str = str.trim();
Chuỗi yyyy = null; Chuỗi MM = null; Chuỗi dd = null;
Chuỗi HH = null; Chuỗi mm = null;
Chuỗi ss = null; Chuỗi ss = null;
// Nếu không có dấu "-" hoặc "/"
if (str.indexOf(“/”)==-1 && str.indexOf(“-“)==-1) {
if (str.length() == 8) {
yyyy = str.substring(0,4);
MM = str.substring(4,6);
dd = str.substring(6,8);
trả về yyyy+”/”+MM+”/”+dd;
}
yyyy = str.substring(0,4);
MM = str.substring(4,6);
dd = str.substring(6,8);
HH = str.substring(9,11);
mm = str.substring(12,14);
ss = str.substring(15,17);
trả về yyyy+”/”+MM+”/”+dd+” “+HH+”:”+mm+”:”+ss;
}
StringTokenizer token = new StringTokenizer(str,”_/-:. “);
StringBuffer result = new StringBuffer();
for(int i = 0; token.hasMoreTokens(); i++) {
Chuỗi tạm thời = token.nextToken();
công tắc(i){
trường hợp 0 phần năm
yyyy = fillString(str, temp, “L”, “20”, 4);
result.append(yyyy);
phá vỡ;
trường hợp 1 phần tháng
MM = fillString(str, temp, “L”, “0”, 2);
result.append("/"+MM);
phá vỡ;
trường hợp 2 một phần của ngày
dd = fillString(str, temp, “L”, “0”, 2);
result.append("/"+dd);
phá vỡ;
trường hợp 3:// phần thời gian
HH = fillString(str, temp, “L”, “0”, 2);
result.append(" "+HH);
phá vỡ;
trường hợp 4:// phần
mm = fillString(str, temp, “L”, “0”, 2);
result.append(":"+mm);
phá vỡ;
trường hợp 5:// phần về giây
ss = fillString(str, temp, “L”, “0”, 2);
result.append(":"+ss);
phá vỡ;
trường hợp 6:// phần mili giây
SSS = fillString(str, temp, “R”, “0”, 3);
result.append("."+SSS);
phá vỡ;
}
}
return result.toString();
}
private static String fillString(String strDate, String str,
Vị trí chuỗi, chuỗi addStr,
int len){
if (str.length() > len) {
ném ngoại lệ IllegalArgumentException mới(
“Chuỗi đối số[" + strDate +
“"] không thể chuyển đổi thành chuỗi ngày tháng."
}
return fillString(str, position, len, addStr);
}
/**
* Đối với chuỗi [str], hãy thêm chuỗi cần thêm [addStr]
* Chèn vào vị trí được chỉ định bởi [position] cho đến khi đạt đến giá trị [len].
*
* *Ngay cả khi [str] là null hoặc một chuỗi rỗng, [addStr] vẫn sẽ hoạt động.
* Trả về kết quả của việc chèn cho đến khi [len] đầy.
* @param str Chuỗi mục tiêu
* @param position Chèn trước ⇒ L hoặc l Chèn sau ⇒ R hoặc r
* @param len Số chữ số cần cộng
* @param addStr Chuỗi cần chèn
* @return Chuỗi sau khi chuyển đổi.
*/
private static String fillString(String str, String position,
độ dài số nguyên,
Chuỗi addStr) {
if (addStr == null || addStr.length() == 0) {
ném ngoại lệ IllegalArgumentException mới.
(Giá trị của chuỗi cần chèn không hợp lệ. addStr=“+addStr);
}
nếu (str == null) {
str = "";
}
StringBuffer buffer = new StringBuffer(str);
while (len > buffer.length()) {
nếu (position.equalsIgnoreCase(“l”)) {
int sum = buffer.length() + addStr.length();
nếu (tổng > độ dài) {
addStr = addStr.substring
(0,addStr.length() – (sum – len));
buffer.insert(0, addStr);
khác{
buffer.insert(0, addStr);
}
khác {
buffer.append(addStr);
}
}
if (buffer.length() == len) {
return buffer.toString();
}
return buffer.toString().substring(0, len);
}
Kết quả thực thi
◆Ví dụ
// Mẫu yyyy-MM-dd
cal = toCalendar(“2007-01-01”);
ngày = cal.getTime();
System.out.println(“[2007-01-01] = '‘+date+””‘);
// Mẫu yyyyMMdd
cal = toCalendar(“20070101”);
ngày = cal.getTime();
System.out.println(“[20070101] = '‘+date+””‘);
// Định dạng yy-MM-dd
cal = toCalendar(“07-01-01”);
ngày = cal.getTime();
System.out.println(“[07-01-01] = '‘+date+””‘);
System.out.println(“\n—– Ngày+Giờ ————————–“);
// Mẫu yyyy/MM/dd HH:mm:ss
cal = toCalendar(“2007/01/01 12:00:00”);
ngày = cal.getTime();
System.out.println(“[2007/01/01 12:00:00] = '‘+date+””‘);
// Mẫu yyyyMMdd HH:mm:ss
cal = toCalendar(“20070101 12:00:00”);
ngày = cal.getTime();
System.out.println(“[20070101 12:00:00] = '‘+date+””‘);
// Mẫu yyyy/MM/dd HH:mm
cal = toCalendar(“2007/01/01 12:00”);
ngày = cal.getTime();
System.out.println(“[2007/01/01 12:00] = '‘+date+””‘);
System.out.println("\n--- Chỉ thời gian ------");
// Định dạng: HH:mm:ss. *Nếu chỉ cần giờ, hãy thêm ngày tháng trước.
cal = toCalendar(
new SimpleDateFormat(“yyyy/MM/dd”).format(new Date()) +
”"12:00:00");
ngày = cal.getTime();
System.out.println(“[12:00:00] = '‘+date+””‘);
}
◆Kết quả đầu ra
----- Chỉ ngày --------------------------- [2007/01/01] = 'Thứ Hai ngày 01 tháng 1 00:00:00 JST 2007' [2007-01-01] = 'Thứ Hai ngày 01 tháng 1 00:00:00 JST 2007' [20070101] = 'Thứ Hai ngày 01 tháng 1 00:00:00 JST 2007' [07-01-01] = 'Thứ Hai ngày 01 tháng 1 00:00:00 JST 2007' ----- Ngày + Giờ -------------------------- [2007/01/01 12:00:00] = 'Thứ Hai ngày 01 tháng 1 12:00:00 JST 2007' [20070101 12:00:00] = 'Thứ Hai ngày 01 tháng 1 12:00:00 JST 2007' [2007/01/01 12:00] = 'Thứ Hai, ngày 01 tháng 01 năm 2007 12:00:00 JST' ----- Chỉ thời gian --------------------------- [12:00:00] = 'Thứ Tư, ngày 06 tháng 06 năm 2007 12:00:00 JST''
Chương trình mẫu này dành cho Chat&Messenger.Chức năng quản lý lịch và thời gian biểuTôi thực sự đang sử dụng nó trong [ngữ cảnh này].
