以下代码会将日期格式从"yyyy-MM-dd'T'HH:mm:ss"
转换为"MM/dd/yyyy"
。
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class TestDate {
public static void main(String[] args) {
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
DateTime dateTime = parser.parseDateTime("2014-05-19T23:59:59");
DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy");
System.out.println(formatter.print(dateTime)+"\n");
dateTime = parser.parseDateTime("2014-06-09T03:00:23.67");
formatter = DateTimeFormat.forPattern("MM/dd/yyyy");
System.out.println(formatter.print(dateTime));
}
"2014-06-09T03:00:23.67"
抛出异常:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2014-06-09T03:00:23.67" is malformed at ".67"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)
at TestDate.main(TestDate.java:16)
我需要能够满足其他可能性,例如:
2014-05-27T03:00:32.613
我只需要约会的"MM/dd/yyyy"
部分,之后的所有内容都可以忽略。我是否需要预测Using Joda Date & Time API to parse multiple formats
或者可以使用通配符忽略某个模式之后的所有内容。类似的东西:
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd%");
或者我可以解析字符串并在' T'日期时间的一部分,只是使用“T'之前出现的值”,虽然这看起来不干净......
或者有另一种方法吗?
更新:
由于不需要时间,而不是使用:
String strDate = "2014-05-19T23:59:59";
DateTime dateTime = parser.parseDateTime(strDate);
将使用:
String strDate = "2014-05-19T23:59:59";
DateTime dateTime = parser.parseDateTime(strDate.substring(0, 10));
这将只解析2014-05-19
部分字符串,这将满足多种时间格式。
答案 0 :(得分:0)
您可以通过以下方式从日期时间(格式yyyy-MM-dd%
)字符串中提取日期:
1)使用String::split
String dateTime = "2014-05-19T23:59:59";
String date = dateTime.split("T")[0];
2)使用正则表达式
Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
Matcher matcher = pattern.matcher(dateTime);
if (matcher.find())
{
System.out.println(matcher.group());
}
您还可以使用regexp:
将格式yyyy-MM-dd%
更改为MM/dd/yyyy
String dateTime = "2014-05-19T23:59:59";
// pattern for 'yyyy-MM-dd%'
Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2}).+");
Matcher matcher = pattern.matcher(dateTime);
if (matcher.matches())
{
// date in format 'MM/dd/yyyy'
String dateInNewFormat = String.format("%s/%s/%s",
matcher.group(2), matcher.group(3), matcher.group(1));
}