我希望我的字符串“10:10”以hh:mm的格式转换为时间而不是MM / dd / yyyy hh:mm:ss aa
Date date;
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("hh:mm");
try
{
date = sdf.parse(a.getString("time").toString());
Log.d(TAG, "onCreate: "+date);
Log.d(TAG, "onCreate: "+a.getString("time"));
}
catch (ParseException e) {
e.printStackTrace();
}
但我在我的logcat中得到了这个
D/MTAG: onCreate: Thu Jan 01 10:00:00 GMT+05:00 1970
D/MTAG: onCreate: 10:00
String timeString = "10:10";
LocalTime time = LocalTime.parse(timeString);
System.out.println(time);
这打印
10:10
不过,我有点作弊。我阅读你的问题的方式,你要求一个日期时间对象,其格式为HH:mm
。 LocalTime
对象(在上面的代码段中使用)和Date
(在您的代码中使用)都不能包含格式。当你将Date
连接到一个字符串或打印LocalTime
时得到的是对象的toString
方法的结果,你不能改变这个方法(只在子类中,你不希望这样)。换句话说,当您需要特定格式时,需要在日期时间对象之外的字符串中使用该格式。
幸运的是,LocalTime.toString()
产生你想要的格式(只要秒和秒的分数为零;否则它们也会在字符串中)。
这会在您的Android设备上运行吗?它会。 LocalTime
是一类JSR-310,也称为java.time
,是近4年前,2014年初推出的现代Java日期和时间API.JSR-310已被移植到ThreeTen Backport的Java 6和7中,后者又被适用于ThreeTenABP中的Android。因此,获取ThreeTenABP,将其添加到您的项目中,并开始享受与过时的日期和时间类相比更好的工作。
PS问题中的格式模式字符串中存在一个错误:小写hh
表示AM或PM从1到12的小时,当小时数为10时效果很好,但并非总是如此。我确信你想要在0到23区间内每天一小时使用大写的HH
。当我用12:12
字符串运行你的代码时,我得到的是1月1日00:12:00 CET 1970.小时数是0,而不是12 。
java.time
。日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,从“A”到“Z”和从“a”到“z”的不带引号的字母被解释为表示日期或时间字符串的组成部分的模式字母。可以使用单引号(')引用文本以避免解释。 “''”代表单引号。不解释所有其他字符;它们只是在格式化过程中复制到输出字符串中,或者在解析过程中与输入字符串匹配。
试试这个:
DateFormat aFormatter = new SimpleDateFormat("HH:mm");
Date dt = aFormatter.parse("10:10");
Calendar aCalander = Calendar.getInstance();
aCalander.setTime(dt);
int hour = aCalander.get(Calendar.HOUR);
int minute = aCalander.get(Calendar.MINUTE);
创建日期时,如您在输出中提到的那样,它将采用“Thu Jan 01 10:00:00 GMT + 05:00 1970”的格式。因此,如果您想显示和使用日期格式,您应该使用SimpleDateFormat中的格式方法。我希望以下代码可以帮助您更好地理解。
//formatting date in Java using SimpleDateFormat
String date_s = "10:10";
SimpleDateFormat dt = new SimpleDateFormat("hh:mm");
Date date = dt.parse(date_s);
System.out.println(date);
System.out.println(dt.format(date));