如何在java中解析这个日期

问题描述 投票:0回答:6

请告诉我如何解析这个日期:“29-July-2012”

我尝试:

new SimpleDateFormat("dd-MMM-yyyy");

但它不起作用。我收到以下异常:

java.text.ParseException: Unparseable date: "29-July-2012"
java parsing date
6个回答
5
投票

您还需要提及区域设置...

Date date = new SimpleDateFormat("dd-MMMM-yyyy", Locale.ENGLISH).parse(string);

3
投票

在您的字符串中,完整格式用于月份,因此根据 http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html 您应该按照建议使用 MMMM在巴兹的评论中。

原因可以从 API 文档中了解到。 http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#month 指出对于月份,如果超过 3 个字符,它将被解释为文本,并且 http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#text指出将使用完整形式(在您的情况下为“July”而不是“Jul”) 4 个或更多字符。


2
投票

试试这个(添加了 Locale.ENGLISH 参数和月份的长格式)

package net.orique.stackoverflow.question11815659;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Question11815659 {

    public static void main(String[] args) {

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM-yyyy",
                    Locale.ENGLISH);
            System.out.println(sdf.parse("29-July-2012"));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

1
投票

使用

split()
函数和 分隔符
"-"

String s = "29-July-2012";

String[] arr = s.split("-");

int day = Integer.parseInt(arr[0]);
String month = arr[1];
int year = Integer.parseInt(arr[2]);

// Now do whatever u want with the day, month an year values....

0
投票

创建一个 StringTokenizer。您首先需要导入库:

import Java.util.StringTokenizer;

基本上,您需要创建一个分隔符,它基本上是分隔文本的东西。在这种情况下,分隔符是“-”(破折号/减号)。

注意:由于您显示了带有引号的文本并表示解析,因此我假设它是一个字符串。

示例:

//Create string
String input = "29-July-2012";

//Create string tokenizer with specified delimeter
StringTokenizer st = new StringTokenizer(input, "-");

//Pull data in order from string using the tokenizer
String day = st.nextToken();
String month = st.nextToken();
String year = st.nextToken();

//Convert to int
int d = Integer.parseInt(day);
int m = Integer.parseInt(month);
int y = Integer.parseInt(year);

//Continue program execution

0
投票

避免遗留日期时间类

您正在使用有严重缺陷的日期时间类,这些类现在已成为遗留的,完全被 JSR 310 中定义的现代 java.time 类所取代,内置于 Java 8+ 中。

java.time

仅使用 java.time 类进行日期时间处理。

要表示仅限日期,请使用

LocalDate

要解析自定义格式,请在

DateTimeFormatter
中定义格式化模式。

指定

Locale
,以确定解析月份本地化名称时使用的人类语言和文化规范。

String input = "29-July-2012";
Locale locale = Locale.of ( "en" , "US" );
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd-MMMM-uuuu" ).withLocale ( locale );
LocalDate localDate = LocalDate.parse ( input , formatter );

localDate.toString() = 2012-07-29

© www.soinside.com 2019 - 2024. All rights reserved.