我想将时间戳2011-03-10T11:54:30.207Z转换为10/03/2011 11:54:30.207。我怎样才能做到这一点?我想将ISO8601格式转换为UTC,然后UTC应该是位置感知的。请帮忙
String str_date="2011-03-10T11:54:30.207Z";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
date = (Date)formatter.parse(str_date);
System.out.println("output: " +date );
异常:java.text.ParseException:无法解析的日期:“2011-03-10T11:54:30.207Z”
答案 0 :(得分:31)
首先,您需要注意UTC不是一种格式,它是一个有效的时区。因此,“从ISO8601转换为UTC”作为一个概念并不真正有意义。
但是,这是一个使用Joda Time的示例程序,它将文本解析为DateTime
然后对其进行格式化。我已经猜到了你可能想要使用的 a 格式 - 你还没有真正提供足够的信息来说明你要做的事情不仅仅是这些。您可能还想考虑时区...是否要在指定时刻显示本地时间?如果是这样,您需要计算用户的时区并进行适当的转换。
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2011-03-10T11:54:30.207Z";
DateTimeFormatter parser = ISODateTimeFormat.dateTime();
DateTime dt = parser.parseDateTime(text);
DateTimeFormatter formatter = DateTimeFormat.mediumDateTime();
System.out.println(formatter.print(dt));
}
}
答案 1 :(得分:29)
是。你可以像这样使用SimpleDateFormat。
SimpleDateFormat formatter, FORMATTER;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String oldDate = "2011-03-10T11:54:30.207Z";
Date date = formatter.parse(oldDate.substring(0, 24));
FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
System.out.println("OldDate-->"+oldDate);
System.out.println("NewDate-->"+FORMATTER.format(date));
输出 OldDate - > 2011-03-10T11:54:30.207Z NewDate - > 10-Mar-2011 11:54:30.207
答案 2 :(得分:0)
将原始日期输入a Date
object,然后使用a DateFormat
打印出结果。如果the automatic parse method不接受您的格式,则可能必须将字符串拆分为较小的片段以创建初始Date
对象。
伪代码:
Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString);
DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS");
String outputString = outputFormat.format(inputDate);
答案 3 :(得分:0)
您可能希望查看joda time,它比java本机日期工具更容易使用,并提供了许多预先构建的常见日期模式。
回应评论,更多细节:
要使用Joda时间执行此操作,您需要两个DateTimeFormatters - 一个用于输入格式来解析输入,另一个用于输出格式以打印输出。您的输入格式是ISO标准格式,因此Joda time的ISODateTimeFormat类有一个静态方法,它已经有一个解析器:dateHourMinuteSecondMillis。您的输出格式不是他们预先构建的格式化程序,因此您必须自己使用DateTimeFormat制作格式。我认为DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS");
应该做到这一点。获得两个格式化程序后,请在输入格式上调用parseDateTime()
方法,并在输出格式上调用print
方法,以字符串形式获取结果。
将它放在一起应该看起来像这样(警告,未经测试):
DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis();
DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS");
String outputFormat = output.print( input.parseDate(inputFormat) );
答案 4 :(得分:0)
希望这有助于:
public String getSystemTimeInBelowFormat() {
String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date());
return timestamp;
}
答案 5 :(得分:-3)
使用DateFormat。 (对不起,但问题简洁并不能保证更长或更详细的答案。)