在java中解析日期和时间

在java中解析日期和时间,java,parsing,datetime,Java,Parsing,Datetime,我有时间格式(yyyy-mm-ddTHH:mm+0:0000)…我需要使用java程序将此格式转换为mm-dd-yyy-hh:mm-am/pm…任何人都可以帮我做这件事..thanx提前…查看java.text.SimpleDateFormat-您需要两个实例,一个用于解析,一个用于格式化。尝试类似的方法: SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm+s:SSSS"); Date date = format

我有时间格式(yyyy-mm-ddTHH:mm+0:0000)…我需要使用java程序将此格式转换为mm-dd-yyy-hh:mm-am/pm…任何人都可以帮我做这件事..thanx提前…

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

尝试类似的方法:

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);

您可以按照Paulo和morja所说的做,也可以只使用String.substring(),因为您的解析要求非常简单。

您应该从字符串创建数据对象->使用适当的类(例如),然后使用其他格式打印它。

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

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

}这是一个现代的答案<2011年,当人们提出这个问题时,code>SimpleDataFormat是正确的答案,但现在已经不是了。原来的课程很麻烦,所以终于在2014年初推出了新的课程

我对你们格式中的几个细节有点困惑

  • yyyy-mm-ddTHH:mm+0:0000
    看起来有点像ISO 8601偏移日期时间,但是
    +0:0000
    应该是UTC的偏移量。我推测它可能是作为
    h:mmss
    格式的偏移量,但它是非标准的,我在别处从未见过
  • 你似乎在用小写字母询问am/pm。这也是非标准的,不是标准类内置的
我建议:

    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
我发现在输入中只需要literal
+0:0000
,而不是试图解释它是最安全的。为了以小写形式生成
pm
,我在格式化后将整个字符串转换为小写。有一个不同的技巧

尝试更灵活地使用偏移量中的小时、分钟和秒,并理解它们可以是:

    sourceTime = sourceTime.replaceFirst("(\\d:\\d{2})(\\d{2})$", "0$1:$2");
    String convertedTime = OffsetDateTime.parse(sourceTime)
            .format(targetFormat)
            .toLowerCase(Locale.ENGLISH);
replaceFirst
0:0000
转换为
00:00:00
,当前面有
+
-
时,符合ISO 8601偏移量。这也适用于其他偏移(只要小时是一位数;您可能希望依次尝试一位数和两位数)。在具体代码中,我们在格式化时仍然忽略偏移量,但如果需要,它可以用于其他目的


DateTimeFormatter
LocalDateTime
OffsetDateTime
是JSR-310的一部分。它们内置于Java8及更高版本中。您也可以通过在Java6和Java7中使用它们。Android的backport还有一个特定版本。

所以你有一个
字符串
,你想把它转换成另一个字符串吗?你能解释更多吗?绳子是从哪里来的?XML?它去哪里?Swing GUI?在第二种格式中,它采用当前(本地)时区。如果不想要默认值,请提供自己的。