每一个日期・时间细绳java.util.Date、java.util.Calendar转换为
在Java中,所有日期和时间字符串如果可能的话, java.util.Calendar 、 java.util.Date 这是一个用于将数据转换为特定类型的示例程序。
转换过程首先将日期和时间格式化为默认的日期和时间字符串,然后…… java.util.Calendar 转换为指定类型。如果转换失败,则会抛出 IllegalArgumentException 异常。
还,java.util.Date 要转换为正确的类型,请使用 Calendar 类的 getTime() 方法。
以下日期格式可以转换:
示例程序
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();
switch (len) {
案例10:
休息;
案例 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);
休息;
案例 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);
休息;
案例 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);
休息;
默认:
抛出新的 IllegalArgumentException(
“参数字符串[“ + strDate +
“] 无法转换为日期字符串。”;
}
返回 cal;;
}
/**
* 默认日期和时间格式的各种日期和时间字符串
转换为*。
*
* 默认日期格式如下:
* 日期格式仅限:yyyy/MM/dd
* 日期和时间格式:yyyy/MM/dd HH:mm:ss.SSS
*
* @param str 要转换的字符串
* @return 默认日期和时间格式
* @throws IllegalArgumentException
* 如果日期字符串无法转换
*/
private static String format(String str){
if (str == null || str.trim().length() < 8) {
抛出新的 IllegalArgumentException(
“参数字符串[“ + str +
“] 无法转换为日期字符串。”;
}
str = str.trim();
字符串 yyyy = null;字符串 MM = null;字符串 dd = null;;
字符串 HH = null;字符串 mm = null;;
String ss = null;String ss = null;
// 如果没有“-”或“/”
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);
返回 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);
返回 yyyy+”/”+MM+”/”+dd+” “+HH+”:”+mm+”:”+ss;
}
StringTokenizer token = new StringTokenizer(str,”_/-:. “);
StringBuffer result = new StringBuffer();
for(int i = 0; token.hasMoreTokens(); i++) {
String temp = token.nextToken();
switch(i){
案例 0: 年部分
yyyy = fillString(str, temp, “L”, “20”, 4);
result.append(yyyy);
休息;
案例 1:// 月部分
MM = fillString(str, temp, “L”, “0”, 2);
result.append("/"+MM);
休息;
案例 2:// 一天中的部分时间
dd = fillString(str, temp, “L”, “0”, 2);
result.append("/"+dd);
休息;
案例 3:时间部分
HH = fillString(str, temp, “L”, “0”, 2);
result.append(" "+HH);
休息;
案例 4:// 部分
mm = fillString(str, temp, “L”, “0”, 2);
result.append(":"+mm);
休息;
案例 5:// 关于秒的部分
ss = fillString(str, temp, “L”, “0”, 2);
result.append(":"+ss);
休息;
案例 6:// 毫秒部分
SSS = fillString(str, temp, “R”, “0”, 3);
result.append("."+SSS);
休息;
}
}
return result.toString();
}
private static String fillString(String strDate, String str,
字符串位置,字符串添加字符串,,
int len){
if (str.length() > len) {
抛出新的 IllegalArgumentException(
“参数字符串[“ + strDate +
“] 无法转换为日期字符串。”;
}
return fillString(str, position, len,addStr);
}
/**
* 对于字符串 [str],添加要添加的字符串 [addStr]
* 从 [position] 指定的位置插入,直到填满 [len] 值。
*
即使 [str] 为空或为空字面量,[addStr] 仍然有效。
* 返回插入直到 [len] 满的结果。
* @param str 目标字符串
* @param position 插入位置在左或左之前 ⇒ 插入位置在右或右之后
* @param len 要添加的数字位数
* @param addStr 要插入的字符串
* @return 转换后的字符串。
*/
private static String fillString(String str, String position,
int len,,
String addStr) {
if (addStr == null || addStr.length() == 0) {
抛出新的 IllegalArgumentException
(要插入的字符串值无效。addStr=“+addStr);
}
如果 (str == null) {
str = "";
}
StringBuffer buffer = new StringBuffer(str);
while (len > buffer.length()) {
如果 (position.equalsIgnoreCase(“l”)) {
int sum = buffer.length() + addStr.length();
如果(总和 > 长度){
addStr = addStr.substring
(0,addStr.length() – (sum – len));
buffer.insert(0, addStr);
别的{
buffer.insert(0, addStr);
}
别的 {
buffer.append(addStr);
}
}
if (buffer.length() == len) {
return buffer.toString();
}
return buffer.toString().substring(0, len);
}
执行结果
◆示例
// yyyy-MM-dd 模式
cal = toCalendar(“2007-01-01”);
date = cal.getTime();
System.out.println(“[2007-01-01] = '‘+date+””‘);
// yyyyMMdd 模式
cal = toCalendar(“20070101”);
date = cal.getTime();
System.out.println(“[20070101] = '‘+date+””‘);
// yy-MM-dd 模式
cal = toCalendar(“07-01-01”);
date = cal.getTime();
System.out.println(“[07-01-01] = '‘+date+””‘);
System.out.println(“\n—– 日期+时间 ————————–“);
// yyyy/MM/dd HH:mm:ss 模式
cal = toCalendar(“2007/01/01 12:00:00”);
date = cal.getTime();
System.out.println(“[2007/01/01 12:00:00] = '‘+date+””‘);
// yyyyMMdd HH:mm:ss 模式
cal = toCalendar(“20070101 12:00:00”);
date = cal.getTime();
System.out.println(“[20070101 12:00:00] = '‘+date+”'”);
// yyyy/MM/dd HH:mm 模式
cal = toCalendar(“2007/01/01 12:00”);
date = cal.getTime();
System.out.println(“[2007/01/01 12:00] = '‘+date+””‘);
System.out.println("\n--- 仅显示时间 ------");
// 格式:HH:mm:ss。*如果只需要时间,请先添加日期。
cal = toCalendar(
new SimpleDateFormat(“yyyy/MM/dd”).format(new Date()) +
”12:00:00);
date = cal.getTime();
System.out.println(“[12:00:00] = '‘+date+”'”);
}
◆输出结果
----- 仅日期 --------------------------- [2007/01/01] = '2007 年 1 月 1 日星期一 00:00:00 JST' [2007-01-01] = '2007 年 1 月 1 日星期一 00:00:00 JST' [20070101] = 'JST 1 月 1 日星期一 00:00:00 2007' [07-01-01] = '2007 年 1 月 1 日星期一 00:00:00 JST' ----- 日期 + 时间 -------------------------- [2007/01/01 12:00:00] = '2007 年 1 月 1 日星期一 12:00:00 JST' [20070101 12:00:00] = ' 日本标准时间 1 月 1 日星期一 12:00:00 2007' [2007/01/01 12:00] = '2007年1月1日星期一 12:00:00 JST' ----- 仅时间 --------------------------- [12:00:00] = '2007年6月6日星期三 12:00:00 JST''
此示例程序适用于 Chat&Messenger。日历和日程管理功能我确实在[这个语境中]使用它。
