Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日期从UTC转换为CET_Java_Date - Fatal编程技术网

Java 将日期从UTC转换为CET

Java 将日期从UTC转换为CET,java,date,Java,Date,我想将UTC格式的日期转换为CET格式的日期 问题是我需要相应地增加或减少小时数 例如: Date = "2015-07-31 01:14:05" 我想将其转换为德语日期(增加两个小时): 我的代码: private static Long convertDateFromUtcToCet(String publicationDate) { //"2015-07-31 01:14:05" SimpleDateFormat simpleDateFormat = new Simpl

我想将UTC格式的日期转换为CET格式的日期

问题是我需要相应地增加或减少小时数

例如:

Date = "2015-07-31 01:14:05"
我想将其转换为德语日期(增加两个小时):

我的代码:

private static Long convertDateFromUtcToCet(String publicationDate) {
    //"2015-07-31 01:14:05"

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
    //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
    Date date = null;
    try {
        date = simpleDateFormat.parse(publicationDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    calendar.setTime(date);
    Date givenDate = calendar.getTime();
    System.out.println("Original UTC date is: " + givenDate.toString());

    TimeZone timeZone = TimeZone.getTimeZone("CET");
    calendar.setTimeZone(timeZone);
    Date currentDate = calendar.getTime();
    System.out.println("CET date is: " + currentDate.toString());

    long milliseconds = calendar.getTimeInMillis();

    return milliseconds;
}
这张照片是:

Original UTC date is: Sat Jan 31 01:14:05 IST 2015
CET date is: Sat Jan 31 01:14:05 IST 2015

首先,您的模式字符串是错误的。它是
yyyy-MM-dd
,而不是
yyy-MM-dd

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
要使用给定时区进行分析,请将其设置为:

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
尝试使用:

long ts=System.currentTimeMillis();
日期本地时间=新日期(ts);
字符串格式=“yyyy-mm-dd hh:mm:ss”;
SimpleDataFormat sdf=新的SimpleDataFormat(格式);
//将本地时间转换为UTC(工作正常)
sdf.setTimeZone(TimeZone.getTimeZone(“UTC”));
Date gmtTime=新日期(sdf.format(localTime));
System.out.println(“本地:“+localTime.toString()+”,“+localTime.getTime()+”-->UTC时间:”
+gmtTime.toString()+“,”+gmtTime.getTime());
//将UTC转换为当地时间
datefromgmt=新日期(gmtTime.getTime()+TimeZone.getDefault().getOffset(localTime.getTime());
System.out.println(“UTC时间:+gmtTime.toString()+”,“+gmtTime.getTime()+”-->本地:”
+fromGmt.toString()+“-”+fromGmt.getTime());

您没有将日期解析为UTC,这可能是问题所在。如果您仔细观察,您可以从输出中看到出了什么问题:在输入字符串中缺少可解析的时区信息的情况下,
SimpleDataFormat
将默认为您所在的任何时区<在本例中,code>IST(因此您在爱尔兰或印度,这应该作为使用三个字母时区缩写的警告)。如果您使用的是Java8,请查看新的数据/日历语法。新的API非常容易理解和使用。这一行
currentDate.toString()
在默认时区打印
Date
,因为
Date
在内部不保存任何时区信息,它只是使用一些硬编码预定义格式的时间点(从历元开始的毫秒计数)。您需要的不是“转换”(没有什么可转换的,您使用的是相同的时间戳),而是“解析”。要在给定的时区输出<代码>日期<代码>,请考虑使用<代码> SimpleDateFormat < /代码>。
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));