使用Joda时间转换日期格式时,可以使用多种日期格式

时间:2014-11-21 15:47:17

标签: java date datetime jodatime

以下代码会将日期格式从"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部分字符串,这将满足多种时间格式。

1 个答案:

答案 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));
  }