如何根据时区将java日期转换为日期对象?

Jim*_*mmy 1 java timezone date

所以我将时间戳保存为Date对象,将时区保存为TimeZone对象.

现在我想创建一个函数,它将一个Date对象和一个TimeZone对象作为参数,并返回一个Date使用时间戳调整的对象.

例如 :

输入:

Date    TimeZone 

12:00   Moscow Standard Time (UTC+3)

输出:

Date 

3:00    

编辑: 删除注意事项Calendar

Aff*_*ffe 8

A java.util.Date是绝对时间点. UTC时间和时间12:00 UTC + 3是完全相同的java.util.Date对象.为了代表一个或另一个,没有"调整".

要获得特定时区的人类可读表示,可以在DateFormat对象上设置时区.

DateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC+3"));
String time = format.format(yourDate);
Run Code Online (Sandbox Code Playgroud)

评论中提出的问题的解决方案:

Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("UTC+3"));
cal1.setTime(yourDate);
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal2.clear();
cal2.set(Calendar.YEAR, cal1.get(Calendar.YEAR));
cal2.set(Calendar.MONTH, cal1.get(Calendar.MONTH));
cal2.set(Calendar.DATE, cal1.get(Calendar.DATE));
cal2.set(Calendar.HOUR_OF_DAY, cal1.get(Calendar.HOUR_OF_DAY));
//simile for whatever level of field precision is needed
Date shiftedDate = cal2.getTime();
Run Code Online (Sandbox Code Playgroud)