【问题标题】:Android: convert string into Datetime format-parse errorAndroid:将字符串转换为日期时间格式解析错误
【发布时间】:2014-02-19 08:49:25
【问题描述】:

我正在尝试将字符串转换为 DateTime 格式。我的字符串是23 Feb 2014 14:00:48。我想以2011-04-08T12:29:00.000Z 格式发送到服务器。

我的做法如下

String str = departetforget.getText().toString();
        System.out.println("printing date"+str);
        String TIMEZONE_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssz";
        try {
            Date date = new SimpleDateFormat(TIMEZONE_DATE_TIME_FORMAT, Locale.US).parse(str);
            System.out.println("printing parsed date "+date);
        } catch (ParseException e) {
            System.out.println("printing date Exception ==> "+e.toString());
            e.printStackTrace();
        }

但是我遇到了解析异常。

【问题讨论】:

标签: android simpledateformat date-formatting


【解决方案1】:

试试这个经过测试的工作演示

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        System.out.println("Converted Date : " + convertDate("23 Feb 2014 14:00:48"));
    }

    private String convertDate(String date) {
        try {
            SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy hh:mm:ss");
            Date d = format.parse(date);
            SimpleDateFormat serverFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
            return serverFormat.format(d);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

}

输出:

转换日期:2014-02-23T14:00:48.000Z

【讨论】:

    【解决方案2】:

    您需要 2 个 SimpleDateFormats 来转换日期字符串。例如:

        String str = departetforget.getText().toString();
        String MY_FORMAT = "dd MMM yyyy HH:mm:ss";
        String TIMEZONE_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssz";
        try {
            Date date = new SimpleDateFormat(MY_FORMAT, Locale.US).parse(str);
    
            String timezoneString = new SimpleDateFormat(MY_FORMAT, Locale.US).format(date);
        } catch (ParseException e) {
            System.out.println("printing date Exception ==> "+e.toString());
            e.printStackTrace();
    
        }
    

    【讨论】:

    • 第二次转换时您好,即;字符串 timezoneString ,我想我们需要用 TIMEZONE_DATE_TIME_FORMAT 替换它 ..我做了它给出但作为 2014-02-19T14:26:58GMT+05:30,但我不需要 GMT,我想要它作为 2011-04- 08T12:29:00.000Z
    • 是的,很抱歉。您需要将其替换为 TIMEZONE_DATE_FORMAT。
    • 如果您不希望 GMT 使用 'Z' 而不是 'z'
    • 对于您提供的日期,您需要使用此模式 yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
    【解决方案3】:
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                String newFormat = formatter.format(testDate);
    
    String date = "2011-11-12 16:05:06";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd HH:MM:SS");
            Date testDate = null;
            try {
                testDate = sdf.parse(date);
            }catch(Exception ex){
                ex.printStackTrace();
            }
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            String newFormat = formatter.format(testDate);
            System.out.println(".....Date..."+newFormat);
    

    【讨论】:

      【解决方案4】:

      您必须以正确的格式解析给定的日期。

      String TIMEZONE_DATE_TIME_PARSE="dd MMM yyyy HH:mm:ss";
      

      然后用 SimpleDateFormat 格式化,比如 sdf.format(date)

      String TIMEZONE_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssz";
      

      【讨论】:

        猜你喜欢
        • 2019-09-14
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多