将UTC日期字符串转换为本地日期字符串特定格式

时间:2014-03-05 08:54:34

标签: java datetime jodatime

我在字符串

中有一个UTC日期
String utcDate = "2014-03-05 07:09:07.0";

我想将其转换为格式DD-MMM-YYYY hh:mm a的本地日期字符串 例如:5-Mar-2014 12:39 PM来自UTC日期2014-03-05 07:09:07.0

如何使用简单的java或joda API实现这一目标

3 个答案:

答案 0 :(得分:2)

使用默认功能非常容易实现。我希望本地数据仅供显示。

SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
parser.setTimeZone(TimeZone.getTimeZone("UTC"));
Date parsed = parser.parse(utcDate);

SimpleDateFormat formatter = new SimpleDateFormat("d-MMM-yyyy hh:mm a");
System.out.println(formatter.format(parsed));

答案 1 :(得分:2)

java.util.Date和.Calendar类非常麻烦。避免他们。而是使用Joda-Time库或与java.time package捆绑在一起的新Java 8

如果使用ISO 8601格式的字符串,则可以将字符串直接传递给Joda-Time DateTime构造函数。您的输入字符串很接近,但中间的空格应为T

使用Joda-Time 2.3库的一些示例代码。

String input = "2014-03-05 07:09:07.0";
String inputModified = input.replace( " ", "T" );

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTimeUtc = new DateTime( inputModified, DateTimeZone.UTC );

DateTime dateTimeParis = dateTimeUTC.toZone( timeZone );
String outputFrance = DateTimeFormat.forPattern( "FF" ).withLocale(Locale.FRANCE).print( dateTimeParis );

DateTimeFormatter formatter = DateTimeFormat.forPattern( "d-MMM-yyyy hh:mm a" ).withLocale( Locale.US );
String outputParisCustom = formatter.print( dateTimeParis );

答案 2 :(得分:1)

以下代码可帮助您将UTC转换为IST或任何其他时区。您需要注意要与SimpleDateFormat一起使用的时区。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class ConvertTimeZone {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = sdf.parse("2014-03-05 07:09:07");
        System.out.println("time in UTC " +sdf.format(date));
        sdf.setTimeZone(TimeZone.getTimeZone("IST"));
        System.out.println("Time in IST is " + sdf.format(date));
    }
}