请建议一种在 EST 中打印日期的方法。
public Date convertToEST(Date date)
{
// some code here
}
如果我在 IST 中传入一个日期,该方法应该在 EST 中返回该日期。
你需要以下
Date date = new Date();
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
// Set the formatter to use a different timezone
formatter.setTimeZone(TimeZone.getTimeZone("EST"));
// Prints the date in the EST timezone
System.out.println(formatter.format(date));
要将方法返回一个Date
对象,您需要如下所示
public static Date convertToEST(Date date) throws ParseException {
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("EST"));
return formatter.parse((formatter.format(date)));
}
Javadoc- DateFormat.format
,DateFormat.parse
“该方法应在 EST 中返回该日期”的想法是错误的。自 1970 年 1 月 1 日格林威治标准时间 00:00:00 以来,日期只是毫秒的持有者。它与时区无关。
在java中更改时区
public class TimeZoneSample {
public static void main(String[] args) throws ParseException {
// I am in IST time Zone (Its ID is Asia/Calcutta or ITS)
System.out.println(TimeZone.getDefault());
// I get Indian Time printed
System.out.println(new Date());
System.out.println("-------------------");
// I am setting the time zone to China
TimeZone.setDefault(TimeZone.getTimeZone("CTT"));
// Now my default time zone is in China
System.out.println(TimeZone.getDefault());
// I get Chian Time printed
System.out.println(new Date());
System.out.println("-------------------");
// I am setting the time zone to EST
TimeZone.setDefault(TimeZone.getTimeZone("EST"));
// Now my default time zone is in EST
System.out.println(TimeZone.getDefault());
// I get Eastern Time printed
System.out.println(new Date());
}
}
控制台输出
sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
Wed Dec 26 10:22:25 IST 2012
-------------------
sun.util.calendar.ZoneInfo[id="CTT",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
Wed Dec 26 12:52:25 CST 2012
-------------------
sun.util.calendar.ZoneInfo[id="EST",offset=-18000000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Tue Dec 25 23:52:25 EST 2012
DateFormat requiredDateFormat = new SimpleDateFormat("hh:mm a zzz, EEE MMMM dd,yyyy");
requiredDateFormat.setTimeZone(TimeZone.getTimeZone("US/Eastern"));
String date = requiredDateFormat.format(new Date());
System.out.println(date);
控制台输出:美国东部标准时间上午 06:25,2018 年 2 月 13 日星期二