如何从Facebook检索的日期字符串中解析时间

时间:2013-12-21 15:16:56

标签: java android facebook date

我从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()是一个字符串,它给我的日期就像我之前说的那样。

如果我这样做,我会收到一个错误:

  

无法解释的日期。

有人知道解决方法吗?

3 个答案:

答案 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 );

DateTime对象

如果您希望将时间转换为特定时区,请将字符串转换为日期时间对象。使用格式化程序来表达时间组件。

以下是使用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 ......好吧,你明白了。