Android SimpleDateFormat只能获取时间

Android SimpleDateFormat只能获取时间,android,timestamp,date-format,simpledateformat,Android,Timestamp,Date Format,Simpledateformat,当我试图只从时间戳中获取时间时,我遇到了一个问题 时间戳的一个示例是: 2012-04-19T23:05:00+0200 我认为格式是“yyyy-MM-dd'T'HH:MM:ss.SSSZ”,对吗? 而且必须是“HH:mm” 我使用以下代码,但它不返回任何内容: public String getTime(String Vertrektijd){ final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:m

当我试图只从时间戳中获取时间时,我遇到了一个问题

时间戳的一个示例是:

2012-04-19T23:05:00+0200

我认为格式是“yyyy-MM-dd'T'HH:MM:ss.SSSZ”,对吗? 而且必须是“HH:mm”

我使用以下代码,但它不返回任何内容:

public String getTime(String Vertrektijd){
        final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        Date dateObj;
        String newDateStr = null;
        try
        {
            dateObj = df.parse(Vertrektijd);
            SimpleDateFormat fd = new SimpleDateFormat("HH:mm");
            newDateStr = fd.format(dateObj);
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
        return newDateStr;
    }
谢谢你的帮助

Date有一个getHours()和getMinutes()函数,但不推荐使用。正确的方法是使用日历

Calendar calendar = Calendar.getInstance();
calendar.setTime( dateObj );
int hours = calendar.get( Calendar.HOUR_OF_DAY );
int minutes = calendar.get( Calendar.MINUTE );

你的代码是正确的

在示例中,您在问题中给出的时间(即,“2012-04-19T23:05:00+0200”)缺少毫秒

试着通过这个

getTime("2012-04-19T23:05:00.235+0200");
它应该会起作用

编辑: 如前所述,如果您不想使用毫秒 您可以将代码更改为

final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
本文试图总结Java和Android提供的与日期、时间和时区相关的所有令人困惑的类。基本上,大多数日期/时间操作都使用GregoriaCalendar对象,可能使用Calendar超类中的方法。要进行特定于区域设置的格式设置,需要使用DateFormat。但这只能格式化日期对象,因此您需要将日历/公历转换为其中一个。基本上,SimpleDataFormat用于进行自定义格式设置,正如您已经发现的那样


请注意,有两个不同的类称为“DateFormat”。

@Jelmer-Visser:或者,将格式化程序更改为
yyy-MM-dd'HH:MM:ssZ
,以使用您给出的示例。请注意最后一部分是如何不同的,因为实际上,您混淆了毫秒部分。