【发布时间】:2015-08-04 12:28:03
【问题描述】:
我想打印从字符串获取的日期的时间(小时:分钟:秒)。
我有一个带有下一个值的字符串:
String dateStr = "Tue, 04 Aug 2015 12:09:10 GMT"
我将其解析为日期:
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
Date d = format.parse(dateStr);
但是当我尝试获取小时、分钟和秒时,我得到了不同的值:
System.out.println("The current time is: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
打印:“当前时间是:9:9:10”
怎么了?不应该打印“当前时间是:12:9:10”吗?
谢谢:)
更多信息:
当我创建日期时,它会自动将时区设置为 GMT-03:00 2015,这就是打印时间减少 3 小时的原因。如何设置时区?
【问题讨论】:
-
注意你正在使用的所有不推荐使用的方法......使用日历对象并设置你已经阅读的日期时间,然后使用
Calendar.get(Calendar.XXXXXXX)方法:SimpleDateFormat sdf = new SimpleDateFormat("FORMAT HERE", Locale.EN_US); cal.setTime(sdf.parse("DATE HERE")); System.out.println(cal.get(Calendar.MINUTE)); -
是的,可能使用Date以外的方式可以解决问题。你能把你的完整解决方案放在答案中吗?
-
你有没有注意到这正是你从蒙得维的亚到格林威治标准时间的差别?
-
是的,我注意到了。那我的代码有什么问题?为什么我得到 GMT-3?是因为格式吗?
-
您在阅读格林威治标准时间后打印出乌拉圭日期。输出转换搞砸了。像这样创建一个日历:
cal = new GregorianCalendar(Locale.ENGLISH, TimeZone.forName("GMT"));并设置时间。它会起作用的。顺便说一句,名字可能不准确,因为我不在电脑旁