如何在java中将UTC日期格式字符串转换为日期格式?

如何在java中将UTC日期格式字符串转换为日期格式?,java,string,datetime,simpledateformat,utc,Java,String,Datetime,Simpledateformat,Utc,我要求日期采用UTC格式,如:星期四1月19日19:30:00 UTC+0530 1970。我想转换成普通日期格式dd-MM-yyyy-HH:MM:ss。下面是我尝试的代码 DateFormat formatter = new SimpleDateFormat("E,MMM dd,yyyy h:mmaa"); String today = formatter.format("Thu Jan 1 19:30:00 UTC+0530 1970"); SimpleDateFormat f = n

我要求日期采用UTC格式,如:星期四1月19日19:30:00 UTC+0530 1970。我想转换成普通日期格式dd-MM-yyyy-HH:MM:ss。下面是我尝试的代码

DateFormat formatter = new SimpleDateFormat("E,MMM dd,yyyy h:mmaa");   
String today = formatter.format("Thu Jan 1 19:30:00 UTC+0530 1970");
SimpleDateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date d = f.parse(masterDetailsJsonObject.get("cols1").toString());

但它抛出了一个异常,称为不可接受的日期。请导游。提前谢谢。

您可以试试这个

    java.util.Date dt = new java.util.Date("Thu Jan 1 19:30:00 UTC+0530 1970");
    String newDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(dt);
    System.out.println(""+newDateFormat);
乔达时间 使用第三方开源日期时间库,这类工作要容易得多

请注意,与java.util.Date不同,Joda Time DateTime知道自己的时区

下面是一些使用Joda Time 2.3的示例代码

String input=“Thu Jan 1 19:30:00 UTC+0530 1970”;
DateTimeFormatter formatter=DateTimeFormat.forPattern(“EEE MMM dd HH:mm:ss'UTC'Z yyyy”);
//添加“withOffsetParsed()”意味着“设置新日期时间的时区偏移以匹配输入字符串”。
DateTime DateTime=格式化程序.withOffsetParsed().parseDateTime(输入);
//转换为UTC/GMT(无时区偏移)。
DateTime dateTimeUtc=DateTime.toDateTime(DateTimeZone.UTC);
//转换为印度时区。也就是+05:30(注意半小时的差异)。
DateTime dateTimeIndia=dateTimeUtc.toDateTime(DateTimeZone.forID(“亚洲/加尔各答”);
转储到控制台

System.out.println(“dateTime:+dateTime”);
System.out.println(“dateTimeUtc:+dateTimeUtc”);
System.out.println(“dateTimeIndia:+dateTimeIndia”);
当运行时

日期时间:1970-01-01T19:30:00.000+05:30 日期时间UTC:1970-01-01T14:00:00.000Z 印度日期时间:1970-01-01T19:30:00.000+05:30 最新 如果出于其他目的需要java.util.Date,请转换日期时间

java.util.Date date = dateTime.toDate();
格式化字符串 要将日期时间表示为特定格式的新字符串,请搜索“joda format”。你会发现许多问题和答案

Joda Time提供了许多用于生成字符串的功能,包括格式的默认格式化程序(如上所示)、自动更改元素顺序甚至将单词翻译为各种语言的区域设置敏感格式,以及从用户计算机设置中感知的格式。如果这些都不能满足您的特殊需求,您可以在Joda Time的帮助下定义自己的格式

Locale.setDefault(Locale.US);

SimpleDateFormat sourceDateFormat = new SimpleDateFormat("E MMM d HH:mm:ss 'UTC'Z yyyy");
Date sourceDate = sourceDateFormat.parse("Thu Jan 1 19:30:00 UTC+0530 1970");
System.out.println(sourceDate);

SimpleDateFormat targetFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String targetString = targetFormat.format(sourceDate);

System.out.println(targetString);

使用“
E MMM d HH:mm:ss'UTC'Z yyyy
”作为源格式。我不喜欢Java的DateAPI,尤其是对于时区的情况。看起来不错。

你用什么语言?你试过什么?我想用Java来转换。我尝试了SimpleDataFormat类,但得到了异常不可解析的日期。。请看。@Andrew:我已经添加了我根据stackoverflow规则尝试过的代码。顺便说一句,没有“正常”日期格式。不同文化和语言的日期时间格式差异很大。最接近“正常”的是官方标准,格式如下:
2014-01-24T10:30:27+02:00
。我的意见是。2016年3月13日星期日19:21:30 UTC工作正常