Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日期时间字符串格式化为仅时间_Java_Android_Date Format_Simpledateformat - Fatal编程技术网

Java 将日期时间字符串格式化为仅时间

Java 将日期时间字符串格式化为仅时间,java,android,date-format,simpledateformat,Java,Android,Date Format,Simpledateformat,我正在从SQLite数据库检索datetime,它的格式是 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 fo

我正在从SQLite数据库检索datetime,它的格式是

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
//下面的dateStr正确记录为yyyy-MM-dd HH:MM:ss格式
String dateStr=cursor.getString(cursor.getColumnIndex(“开始时间”);
SimpleDataFormat sdf=新的SimpleDataFormat(“HH:mm”);

字符串shortTimeStr=sdf.format(dateStr);// 传递字符串时,SimpleDataFormat.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); 
是的,我更愿意在数据库中存储尽可能长的日期,因此获取日期对象会更简单:

Long dateMilliseconds = cursor.getLong(cursor.getColumnIndex("start_time"));
Date fullDate = new Date(dateMilliseconds);

您需要执行以下操作

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

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

SimpleDataFormat需要日期参数,而不是字符串。您应该将日期存储为毫秒,并从中创建日期对象。Date d=新日期(dateAsMillisec),然后将其传递给simpledateformat。@doc_180:好的,对不起,你说得很对-可能需要重新考虑我的问题。我的问题是Android端的DB是基于PC的应用程序SQLite DB的“镜像”,它使用长/反向datetime格式,我希望保持格式不变。我尝试使用Date.parse(String)和sdf.format(…),但这也引发了一个异常。您是否尝试了我的代码。我已经检查过了。谢谢,请看我问题末尾的编辑。我认为将日期存储为长(毫秒)可能是未来的一种方式,但目前,我正在镜像由其他人创建的PC SQLite DB,因此我在PC/Android之间使用相同的格式。谢谢,请参阅我问题末尾的编辑。我认为将日期存储为长(毫秒)可能是未来的一种方式,但目前,我正在镜像由其他人创建的PC SQLite DB,因此我在PC/Android之间使用相同的格式。df代表什么?df代表DateFormat。df似乎引用了SimpleDataFormat来解析日期。