转换日期字符串
问题描述:
我有一个日期字符串为“2014年11月25日10:30”,我想它转换为“星期二11月25日10:30:00北京时间2014”转换日期字符串
SimpleDateFormat pendingmesstime2=new SimpleDateFormat("dd/MM/yyyy HH:mm");
Date pendingmessd2;
StringBuffer pendingmesstime="25 Nov 2014 14:41";
pendingmessd2=pendingmesstime2.parse(pendingmesstim);
这是给ParseException.Unparsable日期 “2014 11月25日14:41”
logcat的是:
11-25 14:54:25.919: D/pendingmesstime is(21177): 25 Nov 2014 14:41
11-25 14:54:25.919: W/System.err(21177): java.text.ParseException: Unparseable date: " 25 Nov 2014 14:41" (at offset 2)
11-25 14:54:25.939: W/System.err(21177): at java.text.DateFormat.parse(DateFormat.java:626)
11-25 14:54:25.939: W/System.err(21177): at com.example.gate_keeper.PendingMessageFragment$1.onItemClick(PendingMessageFragment.java:184)
11-25 14:54:25.939: W/System.err(21177): at android.widget.AdapterView.performItemClick(AdapterView.java:292)
11-25 14:54:25.939: W/System.err(21177): at android.widget.AbsListView.performItemClick(AbsListView.java:1394)
11-25 14:54:25.939: W/System.err(21177): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3024)
11-25 14:54:25.939: W/System.err(21177): at android.widget.AbsListView$1.run(AbsListView.java:3830)
11-25 14:54:25.939: W/System.err(21177): at android.os.Handler.handleCallback(Handler.java:605)
11-25 14:54:25.939: W/System.err(21177): at android.os.Handler.dispatchMessage(Handler.java:92)
11-25 14:54:25.939: W/System.err(21177): at android.os.Looper.loop(Looper.java:137)
11-25 14:54:25.939: W/System.err(21177): at android.app.ActivityThread.main(ActivityThread.java:4517)
11-25 14:54:25.939: W/System.err(21177): at java.lang.reflect.Method.invokeNative(Native Method)
11-25 14:54:25.939: W/System.err(21177): at java.lang.reflect.Method.invoke(Method.java:511)
11-25 14:54:25.939: W/System.err(21177): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
11-25 14:54:25.939: W/System.err(21177): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
11-25 14:54:25.939: W/System.err(21177): at dalvik.system.NativeStart.main(Native Method)
答
你需要
SimpleDateFormat pendingmesstime2=new SimpleDateFormat("dd MMM yyyy HH:mm");
日期格式字符串必须与您尝试解析的字符串格式相同。您已指定25/11/2014 14:41
的格式,而不是25 Nov 2014 14:41
。
从StringBuffer
到String
的转换还有一些不可思议的事情:由于某种原因,开始时会出现一些额外的空格。我只能假设这是你没有向我们展示过的东西的结果。 (它看起来好像没有完全复制并粘贴到源代码中,因为最后一行至少有一个pendingmesstime
变量名的拼写错误。)
答
您必须指定输入和输出日期格式。试试这个代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverter
{
public static void main(String[] args)
{
DateConverter converter = new DateConverter();
String outputDate = converter.convertDate("25 Nov 2014 14:41");
System.out.println(outputDate);
}
DateConverter() {}
public String convertDate(String inputDate)
{
try
{
Date date = new SimpleDateFormat("dd MMM yyyy HH:mm").parse(inputDate);
return new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date);
}
catch(ParseException e)
{
e.printStackTrace();
return "Could not parse date";
}
}
}
答
你正在从一个字符串中创建一个Date变量。您的格式为将识别为日期字符串。你输入输出格式为输入格式。改变它,它会正常工作。您的格式应为:
25 Nov 2014 14:41
dd MMM yyyy HH:mm
答案在问题中。看看你想要在堆栈跟踪中解析的字符串。你没看到领先的白色空间吗?你没有看到它与你使用的图案完全不符?模式中有斜杠。并且没有任何字符串需要解析。 – 2014-11-25 09:37:28
为什么在没有输入格式时会插入斜杠? – theGreenCabbage 2014-11-25 09:43:37
是的,好友...... thanx .... :-) – 2014-11-25 09:44:38