如何将时间戳从yyyy-MM-ddThh:mm:ss:SSSZ格式转换为MM / dd / yyyy hh:mm:ss.SSS格式? 从ISO8601到UTC

我想将时间戳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:Unparseable date:“2011-03-10T11:54:30.207Z”

首先,您需要知道UTC不是一种格式,它是一个有效的时区。 因此,“从ISO8601转换为UTC”作为一个概念并不真正有意义。

但是,这是一个使用Joda Time的示例程序,它将文本解析为DateTime ,然后对其进行格式化。 我已经猜到你可能想要使用的一种格式 – 你还没有真正提供足够的信息来说明你要做的事情要多说些什么。 您可能还想考虑时区…是否要在指定时刻显示当地时间 ? 如果是这样,您需要计算用户的时区并进行适当的转换。

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

是。 你可以像这样使用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

Date对象中输入原始日期,然后使用DateFormat打印出结果。 如果自动解析方法不接受您的格式,则可能必须将字符串拆分为较小的片段以创建初始Date对象。

伪代码:

 Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString); DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS"); String outputString = outputFormat.format(inputDate); 

您可能希望查看joda时间 ,这比java本机日期工具更容易使用,并提供了许多预先构建的常见日期模式。

在回应评论时,更多细节:

要使用Joda时间执行此操作,您需要两个DateTimeFormatters – 一个用于输入格式来解析输入,另一个用于输出格式以打印输出。 您的输入格式是ISO标准格式,因此Joda time的ISODateTimeFormat类已经有一个带有解析器的静态方法: dateHourMinuteSecondMillis 。 您的输出格式不是他们预先构建的格式化程序,因此您必须自己使用DateTimeFormat制作 。 我认为DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); 应该做的伎俩。 获得两个格式化程序后,调用输入格式的parseDateTime()方法和输出格式的print方法,以字符串forms获取结果。

把它放在一起应该看起来像这样(警告,未经测试):

 DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis(); DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); String outputFormat = output.print( input.parseDate(inputFormat) ); 

希望这可以帮助:

 public String getSystemTimeInBelowFormat() { String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date()); return timestamp; } 

使用DateFormat 。 (对不起,但问题简洁并不能保证更长或更详细的答案。)