解析java中的日期和时间

时间:2011-03-09 12:33:38

标签: java parsing datetime

我有时间格式(yyyy-mm-ddTHH:mm + 0:0000)..我需要使用java程序将此格式转换为mm-dd-yyyy hh:mm am / pm ...任何一个帮助我这样做..提前提前......

6 个答案:

答案 0 :(得分:9)

尝试这样的事情:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm+s:SSSS");
Date date = format.parse(dateString);
format = new SimpleDateFormat("MM-dd-yyyy hh:mm a");
dateString = format.format(date);

答案 1 :(得分:2)

查看java.text.SimpleDateFormat - 您需要两个实例,一个用于解析,一个用于格式化。

答案 2 :(得分:2)

这是现代的答案。在问到这个问题时,SimpleDateFormat是正确的答案,但现在已不复存在了。原来的课程很麻烦,所以最后他们的替代品早在2014年就出现了。

我对你的格式中的一些细节感到有些困惑。

  • yyyy-mm-ddTHH:mm+0:0000看起来有点像ISO 8601偏移日期时间,但+0:0000应该是UTC的偏移量。我推测它可能是h:mmss格式的偏移量,但它是非标准的,我从未见过其他地方。
  • 你似乎要求小写的上午/下午。这也是非标准的,并没有内置标准类。

我建议:

    DateTimeFormatter sourceFormat
            = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm'+0:0000'");
    DateTimeFormatter targetFormat
            = DateTimeFormatter.ofPattern("MM-dd-uuuu hh:mm a", Locale.ENGLISH);

    String sourceTime = "2017-07-05T20:31+0:0000";
    String convertedTime = LocalDateTime.parse(sourceTime, sourceFormat)
            .format(targetFormat)
            .toLowerCase(Locale.ENGLISH);

    System.out.println(convertedTime);

打印

07-05-2017 08:31 pm

我觉得最安全的只是在输入中要求文字+0:0000,而不是试图解释它。为了以小写形式生成pm,我在格式化后将整个字符串转换为小写。有一个不同的技巧in this answer

尝试在偏移中使用小时,分钟和秒更加灵活并理解它们可能是:

    sourceTime = sourceTime.replaceFirst("(\\d:\\d{2})(\\d{2})$", "0$1:$2");
    String convertedTime = OffsetDateTime.parse(sourceTime)
            .format(targetFormat)
            .toLowerCase(Locale.ENGLISH);

replaceFirst0:0000转换为00:00:00,其前面有+-符合ISO 8601偏移量。这也适用于其他偏移(只要小时是一位数;你可能想要依次尝试一位和两位数)。在具体的代码中,我们仍然在格式化时忽略偏移量,但如果需要,它可以用于其他目的。

DateTimeFormatterLocalDateTimeOffsetDateTime是JSR-310的一部分。它们内置于Java 8及更高版本中。您也可以通过ThreeTen Backport在Java 6和7中使用它们。还有一个特定版本的Android后端,ThreeTenABP

答案 3 :(得分:1)

请参阅此代码段的工作示例:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTimeAMPM {
    public static void main(String[] args) throws ParseException {

DateFormat inputDateFormatter = new SimpleDateFormat(
    "yyyy-MM-dd'T'HH:mm+s:SSSS");
Date date = inputDateFormatter.parse("2011-11-11T22:33+0:400");
String outputDateFormatter = "MM-dd-yyyy HH:mm:ss a";
SimpleDateFormat sdf = new SimpleDateFormat(outputDateFormatter);
System.out.println("Date: " + sdf.format(date));
}

}

答案 4 :(得分:0)

您可以执行Paulo和morja所说的或仅使用String.substring(),因为您的解析要求非常简单。

答案 5 :(得分:0)

您应该从String中创建Data对象 - >使用适当的类(例如SimpleDataFormat),然后使用其他格式打印。