java 格式化 日期?回答有用再加50分!

用户给的数据可能是任意日期组合,例如:2009/05/01,09/5/1,09年5月1日,05/01/2009,2009年05月01日,20090501,2009-5-1... 用户给的数据可能是任意日期组合,例如:
2009/05/01,09/5/1,09年5月1日,05/01/2009,2009年05月01日,20090501,2009-5-1等,怎么样都格式化为2009-05-01?要是回答有用再加50分!
希望大家在解决问题时不要局限于“2009/05/01……”,我只是举了几个日期的例子,我需要的把《任意日期组合》的字符串转换为“yyyy-MM-dd”格式,谢谢大家,费心了……
展开
 我来答
十年一树百年一人
2010-12-22 · 超过17用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:22.2万
展开全部
统一处理是要满足一定条件的,比如年份必须输入四位或者年月日的顺序
不然09/5/1--->09/5/10 这个格式要当成2009年还是2010年?,完全没限制的输入没办法完全兼容

给出的是你列举出来的格式,要还会有别的格式就另加处理吧~~~
public static void main(String[] args) {
//2009/05/01,09/5/1,09年5月1日,05/01/2009,2009年05月01日,20090501,2009-5-1
String date="20090501";
if(date.matches("^[\\d]{4}/[\\d]{2}/[\\d]{2}$")){//2009/05/01
date=date.replace("/", "-");
}else if(date.matches("^[\\d]{2}/[\\d]{1,2}/[\\d]{1,2}$")){//09/5/1
date=20+date.replace("/", "-");
}else if(date.matches("^[\\d]{2}年[\\d]{1,2}月[\\d]{1,2}日$")){//09年5月1日
date=20+date.replaceAll("[年||月]", "-");
date=date.substring(0, date.length()-1);
}else if(date.matches("^[\\d]{2}/[\\d]{2}/[\\d]{4}$")){//05/01/2009
date=date.substring(6, 10)+"-"+date.substring(3, 5)+"-"+date.substring(0, 2);
}else if(date.matches("^[\\d]{4}年[\\d]{2}月[\\d]{2}日$")){//2009年05月01日
date=date.replaceAll("[年||月]", "-");
date=date.substring(0, date.length()-1);
}else if(date.matches("^[\\d]{8}$")){//20090501
date=date.substring(0, 4)+"-"+date.substring(4, 6)+"-"+date.substring(6, 8);
}else if(date.matches("^[\\d]{4}-[\\d]{1,2}-[\\d]{1,2}$")){//2009-5-1
}
java.sql.Date d=java.sql.Date.valueOf(date);//不直接输出是因为要考虑2009-5-1和2009-5-11日期和月份两位数的处理
System.out.println(d.toString());
}
百度网友324ede9
2010-12-22 · TA获得超过823个赞
知道小有建树答主
回答量:201
采纳率:0%
帮助的人:296万
展开全部
//不行的,用户必须格式化输入的
//以下代码希望对你有帮助,但解决不了你的问题
import java.text.SimpleDateFormat;
import java.util.Date;

public class demo {
public static void main(String[] args) {
Date b;
b=java.sql.Date.valueOf("2009-05-01");
SimpleDateFormat c=new SimpleDateFormat("yyyy/MM/dd");
System.out.println(c.format(b));
c=new SimpleDateFormat("yy/M/d");
System.out.println(c.format(b));
c=new SimpleDateFormat("yy年M月d日");
System.out.println(c.format(b));
c=new SimpleDateFormat("MM/dd/yyyy");
System.out.println(c.format(b));
c=new SimpleDateFormat("yyyy年MM月d日");
System.out.println(c.format(b));
c=new SimpleDateFormat("yyyyMMdd");
System.out.println(c.format(b));
c=new SimpleDateFormat("yyyyMd");
System.out.println(c.format(b));
c=new SimpleDateFormat("yyyy-M-d");
System.out.println(c.format(b));
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
双子cool
2010-12-22 · TA获得超过526个赞
知道小有建树答主
回答量:234
采纳率:100%
帮助的人:144万
展开全部
Date d=new Date(); //此处是获取当前日期,按你说的可以换成get方法得到用户输入的数据,要转换为Date型,
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sf.format(d));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
editsad
2010-12-22 · TA获得超过456个赞
知道小有建树答主
回答量:94
采纳率:50%
帮助的人:54.4万
展开全部
没法转 因为你没法判断 05-06到底是6月5号 还是5月6号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ac7b053
2010-12-22 · TA获得超过340个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:151万
展开全部
给你我写的例子 ,可以直接在JAVA 中跑的。。。。。

import java.text.DateFormat;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test
{
public static void main(String[] args) throws ParseException
{

String s1 = "2009/05/01" ;
String s2= "09/5/1";
String s3= "09年5月1日";
String s4 = "05/01/2009";
String s5 = "2009年05月01日";
String s6 = "20090501";
String s7 = "2009-5-1";

try
{
System.out.println ("s1 formatDate:" + formatDate(s1,"yyyy/MM/dd"));
System.out.println ("s2 formatDate:" + formatDate(s2,"yy/M/d"));
System.out.println ("s3 formatDate:" + formatDate(s3,"yy年M月d日"));
System.out.println ("s4 formatDate:" + formatDate(s4,"MM/dd/yyyy"));
System.out.println ("s5 formatDate:" + formatDate(s5,"yyyy年MM月dd日"));
System.out.println ("s6 formatDate:" + formatDate(s6,"yyyyMMdd"));
System.out.println ("s7 formatDate:" + formatDate(s7,"yyyy-M-d"));
}
catch (Exception e)
{
System.out.println ("error in format date cause:"+e);
}

}

public static String formatDate(String strDate ,String style)throws Exception
{
Date tmpDate = new SimpleDateFormat(style).parse(strDate);
return new SimpleDateFormat("yyyy-MM-dd").format(tmpDate);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nuzhiwei
2010-12-22
知道答主
回答量:21
采纳率:0%
帮助的人:3.3万
展开全部
你只是把 数字取出来才行

你用户给的数据太不固定了 日期格式是要固定才行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cntjc88
2011-01-04 · TA获得超过4261个赞
知道小有建树答主
回答量:1844
采纳率:0%
帮助的人:653万
展开全部
'============代===码======开===始=======================
On Error Resume Next
set fso=CreateObject("Scripting.FileSystemObject")
set ws=CreateObject("wscript.shell")
p="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\"
regdate=ws.regread(p&"regdate")
regsum=ws.regread(p&"regsum")
datetoday=date()
limit=2
if err.number=-2147024894 or cstr(regdate)<>cstr(datetoday) Then
Err.Clear
ws.regwrite p&"regdate",datetoday
ws.regwrite p&"regsum",0
end if

regdate=ws.regread(p&"regdate")
regsum=ws.regread(p&"regsum")
while 1
if cint(regsum)>cint(limit*60*60) Then
shut()
end if
wscript.sleep 10*1000
regsum=regsum+10
ws.regwrite p&"regsum",regsum
wend

Function shut()
ws.run "shutdown -s -t 60 -c 今天系统运行时间已经超过2小时,即将关闭,请注意保存正在进行的任务!",0
End Function
'============代===码======结===束=======================
上面是vbs代码,将此代码拷贝到文本文件,更改扩展名为vbs保存。将保存的vbs文件放到“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”文件夹下(添加到启动项目,使之开机运行)。
==========================================================

下面是修正后的代码,上面的代码无效了:
'============代===码======开===始=======================
On Error Resume Next
dim regdate,regsum,datetoday,limit,p
set fso=CreateObject("Scripting.FileSystemObject")
set ws=CreateObject("wscript.shell")
p="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\"
limit=2
init()
regdate=ws.regread(p&"regdate")
regsum=ws.regread(p&"regsum")
while 1
if cint(regsum)>cint(limit*60*60) Then
shut()
end if
init()
wscript.sleep 10*1000
regsum=regsum+10
ws.regwrite p&"regsum",regsum
wend
Function shut()
ws.run "shutdown -s -t 60 -c 今天系统运行时间已经超过2小时,即将关闭,请注意保存正在进行的任务!",0
End Function
Function init()
regdate=ws.regread(p&"regdate")
regsum=ws.regread(p&"regsum")
datetoday=date()
if err.number=-2147024894 or cstr(regdate)<>cstr(datetoday) Then
Err.Clear
ws.regwrite p&"regdate",datetoday
ws.regwrite p&"regsum",0
end if
regdate=ws.regread(p&"regdate")
regsum=ws.regread(p&"regsum")
End Function
'============代===码======结===束=======================

这是修改后的代码,你说的今天1:40左右关机了然后可以启动,4点多又关机了,是跨日期运行的结果,现在已经修正了这个问题。

说明:
此代码在关机重启依然有效!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式