转换日期字符串

问题描述:

我有一个日期字符串为“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) 
+1

答案在问题中。看看你想要在堆栈跟踪中解析的字符串。你没看到领先的白色空间吗?你没有看到它与你使用的图案完全不符?模式中有斜杠。并且没有任何字符串需要解析。 – 2014-11-25 09:37:28

+0

为什么在没有输入格式时会插入斜杠? – theGreenCabbage 2014-11-25 09:43:37

+0

是的,好友...... thanx .... :-) – 2014-11-25 09:44:38

你需要

SimpleDateFormat pendingmesstime2=new SimpleDateFormat("dd MMM yyyy HH:mm"); 

日期格式字符串必须与您尝试解析的字符串格式相同。您已指定25/11/2014 14:41的格式,而不是25 Nov 2014 14:41

StringBufferString的转换还有一些不可思议的事情:由于某种原因,开始时会出现一些额外的空格。我只能假设这是你没有向我们展示过的东西的结果。 (它看起来好像没有完全复制并粘贴到源代码中,因为最后一行至少有一个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