4

我正在从 SQLite DB 中检索日期时间,其格式为...

2011-01-24 02:45:00

在 C# 中,我可以简单地使用DateTime.Parse("2011-01-24 02:45:00").ToString("HH:mm")来获取字符串02:45

他们是我可以在 Android/Java 中做到这一点的一种方式吗?我的 Android 应用程序中的代码如下所示...

// dateStr below is logging as correctly being yyyy-MM-dd HH:mm:ss format
String dateStr = cursor.getString(cursor.getColumnIndex("start_time"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String shortTimeStr = sdf.format(dateStr); // <-- throws IllegalArgumentException

编辑:感谢 doc_180 和 Konstantin Burov - 给出的例子帮助我解决了这个问题。部分问题是我导入的是 java.sql.Date 而不是 java.util.Date。我已经改变了周围的东西,现在它对我来说很完美。

4

2 回答 2

13

您需要执行以下操作。

try {
   Date date = null;
   date = df.parse("2011-01-24 02:45:00");
   SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
   String shortTimeStr = sdf.format(date);
   System.out.println(shortTimeStr);
} catch (ParseException e) {
   // To change body of catch statement use File | Settings | File Templates.
   e.printStackTrace(); 
}

正如我在评论中提到的,您应该将时间存储为毫秒而不是字符串。否则,除了创建中间人对象 Date 之外,我看不到任何其他方法。

于 2011-01-24T03:09:44.833 回答
3

SimpleDateFormat.format 在您传递字符串时需要日期或日历作为参数。首先将字符串转换为日期。

String dateStr = cursor.getString(cursor.getColumnIndex("start_time"));
SimpleDateFormat toFullDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fullDate = toFullDate.parse(dateStr);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String shortTimeStr = sdf.format(fullDate); 

是的,我宁愿将日期存储在数据库中,所以获取一个 Date 对象会更简单:

Long dateMilliseconds = cursor.getLong(cursor.getColumnIndex("start_time"));
Date fullDate = new Date(dateMilliseconds);
于 2011-01-24T03:09:40.997 回答