如何将时间戳从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 。 (对不起,但问题简洁并不能保证更长或更详细的答案。)