如何根据用户时区获取日历日期和时间

时间:2011-12-29 17:09:52

标签: java

Calendar cal = Calendar.getInstance();
    cal.setTimeZone(TimeZone.getTimeZone("PST"));
    cal.setTime(new Date());

    System.out.println("cal:"+cal);
    System.out.println("cal.getime:"+cal.getTime());

输出是:

cal:java.util.GregorianCalendar[time=1325177592164,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="PST",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=PST,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=11,WEEK_OF_YEAR=53,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=363,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=5,AM_PM=0,HOUR=8,HOUR_OF_DAY=8,MINUTE=53,SECOND=12,MILLISECOND=164,ZONE_OFFSET=-28800000,DST_OFFSET=0] cal.getime:Thu Dec 29 22:23:12 IST 2011

面临的问题:

  1. 打印'cal'对象按时区获取日期和时间。

  2. cal.getTime()未按时区显示日期和时间。

4 个答案:

答案 0 :(得分:2)

您应该以UTC(java.util.Date)表示时间,然后在用户的本地时区中显示时间。使用DateFormatTimeZone即可。 Read this article了解更多详情

答案 1 :(得分:0)

不幸的是,Date对象始终以GMT显示时间。您需要使用SimpleDateFormat之类的东西来在格式化的时区中显示时间。

答案 2 :(得分:0)

将用户给定时间分配到字符串变量中,然后创建日期格式化程序。然后使用日期格式化程序解析给定的字符串。

  

String dateAndTime =“30-12-2011 12:00:00 GMT + 5.30”; dateFormate   formate = new SimpleDateFormate(“dd-mm-yyyy hh:mm:ss z”);日期日期=   formate.parse(dateAndTime);

答案 3 :(得分:0)

Date对象是Java不存储TimeZone信息。 如果你这样做

new Date()

这是machine / jvm的当前本地时间。

使用默认/本地时区信息打印它:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
System.out.println(sdf.format(new Date()));