我正在尝试将格式化的日期字符串转换为日期对象。日期字符串被格式化为其他时区。
当我这样做时sdf.parse(String)
,它会返回我的系统日期对象。
代码如下,
static Date convertGMTTime(String timeZone, long longDate){
Date convertedTime = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date date = new Date(longDate);
System.out.println("timezone: "+timeZone +", timestamp: "+date);
Locale locale = Locale.ENGLISH;
TimeZone destTimeZone = TimeZone.getTimeZone(timeZone);// TimeZone.getDefault();
System.out.println("Source timezone: "+destTimeZone);
/* DateFormat formatter = DateFormat.getDateTimeInstance(
DateFormat.DEFAULT,
DateFormat.DEFAULT,
locale);
formatter.setTimeZone(destTimeZone);*/
sdf.setTimeZone(destTimeZone);
String convertedDateStr = sdf.format(date);
System.out.println("convertedDateStr: "+convertedDateStr);
convertedTime = sdf.parse(convertedDateStr);
System.out.println("convertedTime: "+convertedTime + "sdf: "+sdf.getTimeZone());
}catch(Exception e){
e.printStackTrace();
}
return convertedTime;
}
如果有人能提供帮助并指出我哪里出错了,我将不胜感激。提前致谢。
输出:
时区:大西洋/佛得角,时间戳:2012 年 6 月 26 日星期二 17:38:11 IST
源时区:sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,过渡=6,lastRule=null]转换日期:2012-06-26 11:08:11
转换时间:星期二 6 月 26 日 17:38:11 IST 2012
sdf:sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null ]
分享更多细节,当我使用另一个 sdf 对象(没有为其设置时区)时,它确实返回了正确的时间和日期,但时区仍然是从系统时钟中选择的
代码
static Date convertGMTTime(String timeZone, long longDate){
Date convertedTime = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdfParse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
Date date = new Date(longDate);
TimeZone destTimeZone = TimeZone.getTimeZone(timeZone);// TimeZone.getDefault();
System.out.println("Source timezone: "+destTimeZone);
sdf.setTimeZone(destTimeZone);
String convertedDateStr = sdf.format(date);
System.out.println("convertedDateStr: "+convertedDateStr );
convertedTime = sdfParse.parse(convertedDateStr,new ParsePosition(0));
System.out.println("convertedTime: "+convertedTime + "sdf: "+sdf.getTimeZone());
}catch(Exception e){
e.printStackTrace();
}
return convertedTime;
}
输出
Source timezone: sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
convertedDateStr: 2012-06-26 12:24:56
convertedTime: Tue Jun 26 12:24:56 IST 2012
sdf: sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
我知道当我不将时区分配给 sdf 时,它需要系统时区,但为什么它不显示系统时区的时间?我在时区中显示它,就像在字符串中一样,但时区不同。
Ans 当我设置时区时,它会根据我的系统时间返回日期对象,而不管 sdf 是否设置了其他时区。
谁能解释一下 sdf.parse 和 sdf.format 的功能行为。
对我来说,sdf.setTimeZone() 在我们使用格式时确实会产生影响,而当我们使用 sdf.parse() 时它会失效。我觉得很奇怪。
感谢在这方面的帮助。