请告诉我如何解析这个日期:“29-July-2012”
我尝试:
new SimpleDateFormat("dd-MMM-yyyy");
但它不起作用。我收到以下异常:
java.text.ParseException: Unparseable date: "29-July-2012"
您还需要提及区域设置...
Date date = new SimpleDateFormat("dd-MMMM-yyyy", Locale.ENGLISH).parse(string);
在您的字符串中,完整格式用于月份,因此根据 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 个或更多字符。
试试这个(添加了 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();
}
}
}
使用
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....
创建一个 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
您正在使用有严重缺陷的日期时间类,这些类现在已成为遗留的,完全被 JSR 310 中定义的现代 java.time 类所取代,内置于 Java 8+ 中。
仅使用 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