我想要我的String" 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
答案 0 :(得分:2)
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
,是近四年前,即2014年初引入的现代Java日期和时间API.JSR-310已经向后移植到Java 6和7中ThreeTen Backport,反过来又适用于ThreeTenABP中的Android。因此,获取ThreeTenABP,将其添加到您的项目中,并开始享受与过时的日期和时间类相比更好的工作。
PS问题中的格式模式字符串中存在一个错误:小写hh
表示AM或PM从1到12的小时,当小时数为10时效果很好,但并非总是如此。我确信在0到23区间你想要大写HH
一天中的小时。当我用12:12
字符串运行你的代码时,我会得到Thu Jan 01 00:12:00 CET 1970小时数是0,而不是12小时。
java.time
。答案 1 :(得分:1)
日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,来自' A'的未加引号的字母到了' Z' 并且来自'到' 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);
答案 2 :(得分:1)
创建日期时,格式为" 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));