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

Java 如何根据用户时区获取日历日期和时间,java,Java,输出为: cal:java.util.GregorianCalendar[time=1325177592164,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“PST”,offset=-2880000,dstssavings=3600000,usedylight=true,transitions=185,lastRule=java.util.SimpleTimeZone

输出为:

cal:java.util.GregorianCalendar[time=1325177592164,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“PST”,offset=-2880000,dstssavings=3600000,usedylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=PST,偏移量=-28800000,DSTSAVAINGS=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startDayOfWeek=1,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDayOfWeek=1,endDayOfWeek=0]],周的第一天=1,周的第一天=1,纪元=1,年=2011,月=11,年的第周=53,月的第周=5,月的第日=29,年的第日=363,周的第日=5,周的第日=5,月的第日=5,上午晚=0,小时=8,日的小时=8,分钟=53,秒=12,毫秒=164,分区偏移量=-2880000,DST偏移量=0]
加州时间:2011年12月29日星期四22:23:12

面临的问题:

  • 打印“cal”对象时,根据时区获取日期和时间

  • cal.getTime()
    不按时区显示日期和时间


  • 您应该用UTC表示时间(java.util.Date)然后在用户的本地时区中显示时间。使用
    DateFormat
    timezone
    来执行此操作。有关更多详细信息,请参见不幸的是,Date对象始终以GMT显示时间。您需要使用类似SimpleDataFormat的方法在格式化时区中显示时间。

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

    字符串dateAndTime=“30-12-2011 12:00:00 GMT+5.30”日期格式 formate=新的简化格式(“dd-mm-yyy-hh:mm:ss-z”);日期= parse(dateAndTime)


    Date对象是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());
    
    这是机器/jvm的当前本地时间

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

    new Date()
    

    该链接不可用
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
    System.out.println(sdf.format(new Date()));