繁体   English   中英

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

[英]How can I convert a timestamp from yyyy-MM-ddThh:mm:ss:SSSZ format to MM/dd/yyyy hh:mm:ss.SSS format? From ISO8601 to 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

希望这可以帮助:

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

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方法,以字符串形式获取结果。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM