我有时间格式(yyyy-mm-ddTHH:mm + 0:0000)..我需要使用java程序将此格式转换为mm-dd-yyyy hh:mm am / pm ...任何一个帮助我这样做..提前提前......
答案 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);
replaceFirst
将0:0000
转换为00:00:00
,其前面有+
或-
符合ISO 8601偏移量。这也适用于其他偏移(只要小时是一位数;你可能想要依次尝试一位和两位数)。在具体的代码中,我们仍然在格式化时忽略偏移量,但如果需要,它可以用于其他目的。
DateTimeFormatter
,LocalDateTime
和OffsetDateTime
是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),然后使用其他格式打印。