Java 用于从字符串分析日期的偏移量(0)处的不可解析日期异常

Java 用于从字符串分析日期的偏移量(0)处的不可解析日期异常,java,android,date,Java,Android,Date,我正在尝试解析我的字符串,它的格式是19,1192016 12:25 pm,我的SimpleDateFormat是EEEE,MMMM dd,yyyy hh:mm a。我将上述字符串解析为2016年1月19日星期二下午12:25,但它在这里抛出了可分配异常。下面给出了我的代码,请在这里帮助我 stestRequest = new SimpleDateFormat("EEEE, MMMM dd, yyyy hh:mm a"); // stringDate = "19, 1 19, 2016 12:

我正在尝试解析我的字符串,它的格式是
19,1192016 12:25 pm
,我的SimpleDateFormat是
EEEE,MMMM dd,yyyy hh:mm a
。我将上述字符串解析为2016年1月19日星期二下午12:25,但它在这里抛出了可分配异常。下面给出了我的代码,请在这里帮助我

stestRequest = new SimpleDateFormat("EEEE, MMMM dd, yyyy hh:mm a"); 
// stringDate = "19, 1 19, 2016 12:25 pm"
dateRequestSelected       = stestRequest.parse(stringDate); 
请帮帮我,提前谢谢。

试试这个

ParsePosition pos = new ParsePosition(0);
SimpleDateFormat simpledateformat = new SimpleDateFormat("MM dd, yyyy hh:mm a"); //your date string format is : 1 19, 2016 12:25 pm
Date stringDate = simpledateformat.parse(date, pos);
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE, MMMM dd, yyyy hh:mm a"); //Tuesday, January 19, 2016 12:25 pm,
System.out.println(dayFormat.format(stringDate));

因此,如果您的日期字符串为2016年11月19日下午12:25

您需要定义与字符串对应的日期格式:

SimpleDateFormat sdf = new SimpleDateFormat("MM dd',' yyyy hh:mm aa");
然后必须解析字符串:

Date date = sdf.parse(dateString);
下一步是定义输出的格式:

SimpleDateFormat stestRequest = new SimpleDateFormat("EEEE',' MMMM dd',' yyyy hh:mm a"); 
然后您必须使用cal格式:

  stestRequest.format(date);
有关更多信息,请参阅的文档。请尝试此

        String stringDate = "01 19, 2016 12:25 pm";
        SimpleDateFormat oldSdf = new SimpleDateFormat("MM dd, yyyy hh:mm a");
        SimpleDateFormat newSdf = new SimpleDateFormat("EEEE, MMMM dd, yyyy hh:mm a");
        String dateRequestSelected = null;
        try {
            dateRequestSelected = newSdf.format(oldSdf.parse(stringDate));
            Log.e("Date", dateRequestSelected);
        } catch (ParseException e) {
            e.printStackTrace();
        }
输出:2016年1月19日星期二下午12:25

编辑:

        String stringDate = "01 19, 2016 12:25 pm";
        SimpleDateFormat oldSdf = new SimpleDateFormat("MM dd, yyyy hh:mm a");
        SimpleDateFormat newSdf = new SimpleDateFormat("EEEE, MMMM dd, yyyy hh:mm a");
        Date dateRequestSelected = null;
        try {
            dateRequestSelected = newSdf.parse(newSdf.format(oldSdf.parse(stringDate)));
            Log.e("Date", dateRequestSelected+"");
        } catch (ParseException e) {
            e.printStackTrace();
        }
输出:星期二1月19日12:25:00 GMT+2016年5:30

新的Date()。toString()方法将为您提供所需格式的日期。您可以将其写入一个文件,然后在读取该文件时,可以使用新日期(字符串)解析日期。例如:

package Testers;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

public class Datestufff {

public void recordCurrentDate(File file){
    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        String date = new Date().toString();
        writer.write(date);
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public String getDate(File file){   
    String date = "Unknown!";
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line = reader.readLine();
        date = line;
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return date;
}

public void recordDate(File file, Date date){
    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        writer.write(date.toString());
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

stringdate的格式与您的模式不同。第一个19应该是什么?stringDate必须是
Date
format@DanhDC无解析表达式字符串。@Jens谢谢您的评论。19日是我一个月中的一天。我需要将其显示为星期二。因此您必须对其进行解析,然后使用format()设置日期格式。谢谢您的回答。你能告诉我,有一件事,是不是可以把日期设为对象,比如2016年1月19日星期二下午12:25。因为我必须在服务器上发送这样的日期对象。是的,你们可以,但它会改变输出。检查编辑的答案。