我从Facebook活动中获得了这些时间。例如:start_time,它是一个这样的字符串:
2013-12-21T18: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()
是一个字符串,它给我的日期就像我之前说的那样。
如果我这样做,我会收到一个错误:
无法解释的日期。
有人知道解决方法吗?
答案 0 :(得分:11)
您需要两种格式:一种用于解析日期,另一种用于格式化
String startTime = "2013-12-21T18:30:00+0100";
SimpleDateFormat incomingFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date = incomingFormat.parse(startTime);
SimpleDateFormat outgoingFormat = new SimpleDateFormat(" EEEE, dd MMMM yyyy", java.util.Locale.getDefault());
System.out.println(outgoingFormat.format(date));
打印
Saturday, 21 December 2013
答案 1 :(得分:1)
使用yyyy-MM-dd'T'HH:mm:ssZ
之类的内容作为解析格式而不是EEEE, dd MMMM yyyy
。
答案 2 :(得分:-1)
如果您想要的只是从该字符串中提取的时间组件,请在String类上调用substring
方法...
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;
String dateTimeStringFromFacebook = "2013-12-21T18:30:00+0100";
// Extract a substring.
String timeSubstring = dateTimeStringFromFacebook.substring( 11, 19 );
如果您希望将时间转换为特定时区,请将字符串转换为日期时间对象。使用格式化程序来表达时间组件。
以下是使用Joda-Time 2.3库的示例代码。避免使用臭名昭着的java.util.Date/Calendar类。使用Joda-Time或与Java 8捆绑在一起的新java.time。* JSR 310类。
// From String to DateTime object.
DateTime dateTime = new DateTime( dateTimeStringFromFacebook, DateTimeZone.UTC );
// From DateTime object to String
// Extract just the hours, minutes, seconds.
DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm:ss");
String timeFragment_Paris = formatter.withZone( DateTimeZone.forID( "Europe/Paris" ) ).print( dateTime );
String timeFragment_Kolkata = formatter.withZone( DateTimeZone.forID( "Asia/Kolkata" ) ).print( dateTime ); // Formerly known as Calcutta, India.
转储到控制台...
System.out.println( "dateTimeStringFromFacebook: " + dateTimeStringFromFacebook );
System.out.println( "timeSubstring: " + timeSubstring );
System.out.println( "dateTime: " + dateTime );
System.out.println( "timeFragment_Paris: " + timeFragment_Paris );
System.out.println( "timeFragment_Kolkata: " + timeFragment_Kolkata + " (Note the 00:30 difference due to +05:30 offset)");
跑步时......
dateTimeStringFromFacebook: 2013-12-21T18:30:00+0100
timeSubstring: 18:30:00
dateTime: 2013-12-21T17:30:00.000Z
timeFragment_Paris: 18:30:00
timeFragment_Kolkata: 23:00:00 (Note the 00:30 difference due to +05:30 offset)
您的问题无法解决时区问题。养成在使用日期时间值时始终考虑时区的习惯。如果您指的是同一时区,请明确说明。如果您指的是Java环境的默认时区,请说明。如果你的意思是UTC ......好吧,你明白了。