2011-01-24 132 views
5

我检索从中出来,在格式的SQLite数据库中的日期时间时间...格式日期时间字符串只

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和康斯坦丁波罗夫 - 给予帮助我理清问题的例子。部分问题是我正在导入java.sql.Date而不是java.util.Date。我已经改变了一切,现在它对我来说很完美。

+0

SimpleDateFormat需要日期参数,而不是字符串。您应该将日期存储为毫秒并从中创建日期对象。日期d =新日期(dateAsMillisec),然后将其传递给simpledateformat。 – 2011-01-24 03:05:02

+0

@ doc_180:好的,对不起,你说得很对 - 可能需要重新思考我的问题。我的问题是我的Android数据库是基于PC的应用程序的SQLite数据库的“镜像”,它使用了长/反向日期时间格式,我想保持格式一致。我尝试使用Date.parse(String),然后sdf.format(...)但也引发了一个异常。 – Squonk 2011-01-24 03:16:39

+0

你试过我的代码吗?它的工作原理和我检查。 – 2011-01-24 03:30:50

回答

11

你需要做到以下几点。

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(); 
} 

正如我在评论中提到的,您应该将时间存储为毫秒而不是字符串。否则,我没有看到任何其他方式比创建中间人对象日期。

2

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); 
相关问题