我得到这些时间从Facebook的事件。例如:start_time,它是这样的字符串:
2013年12月21日星期一18:30:00+0100
现在我只想要时间,就像:
18.30
我试着这样做:
SimpleDateFormat formatter = new SimpleDateFormat(" EEEE, dd MMMM yyyy", java.util.Locale.getDefault());
Date formatted = null;
try {
formatted = formatter.parse(p.getStart_time());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String formattedString = formatted.toString();
txtStart_time.setText(""+formattedString);
p.getStart_time()
是一个字符串,它给出了我之前说过的日期。
如果我使用这个方法,我会得到一个错误:
无法分析日期。
有人知道附近有什么工作吗?
4条答案
按热度按时间3mpgtkmj1#
您需要两种格式:一个用于解析日期,一个用于格式化日期
印刷品
nr9pn0ug2#
使用类似
yyyy-MM-dd'T'HH:mm:ssZ
的格式代替EEEE, dd MMMM yyyy
作为解析格式。oo7oh9g93#
我得到这些时间从Facebook的事件。例如:start_time,它是这样的字符串:
2013年12月21日星期一18:30:00 + 0100
现在我只想要时间,就像:
18.30
使用
java.time
(现代日期-时间API)的解决方案:+01:00
小时。java.time
API为您提供了OffsetDateTime
以包含日期-时间单位的信息以及时区偏移量。使用适用的DateTimeFormatter
,将字符串解析为OffsetDateTime
,然后使用OffsetDateTime#toLocalTime
获取此日期-时间的LocalTime
部分。java.time
API进行演示**:ONLINE DEMO
y
代替u
,但必须使用I preferu
到y
。从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
关于旧版API的说明:
问题和accepted answer使用了
java.util.Date
和SimpleDateFormat
,这在2013年是正确的做法。2014年3月,java.util
日期时间API及其格式化APISimpleDateFormat
被modern date-time API取代。从那时起,强烈建议停止使用传统的日期时间API。ycl3bljg4#
子字符串
如果您所需要的只是从字符串中提取的时间成分,请调用String类的
substring
方法...日期时间对象
如果要将时间转换为特定时区,请将字符串转换为日期-时间对象。使用格式化程序仅表示时间组件。
下面是一些使用Joda-Time 2.3库的示例代码。避免使用众所周知的糟糕的java.util.Date/Calendar类。使用Joda-Time或Java 8捆绑的新java.time.* JSR 310类。
转储到控制台...
运行时...
思考时区
你的问题没有解决时区的问题。养成一个习惯,在处理日期-时间值时总是考虑时区。如果你指的是同一个时区,明确地说出来。如果你指的是Java环境的默认时区,就说出来。如果你指的是UTC......好吧,你明白了。