Java [Android]从字符串获取小时数
您好,我正在尝试将格式为“17:50”的字符串转换为android中的日期,但当我尝试运行此代码时,我从字符串中获得了正确的小时数,但完整日期是1970年。我需要这个日期来安排在一天中的某个特定时间或第二天发送一些本地通知Java [Android]从字符串获取小时数,java,android,mobile,Java,Android,Mobile,您好,我正在尝试将格式为“17:50”的字符串转换为android中的日期,但当我尝试运行此代码时,我从字符串中获得了正确的小时数,但完整日期是1970年。我需要这个日期来安排在一天中的某个特定时间或第二天发送一些本地通知 String dtStart = "17:50"; SimpleDateFormat format = new SimpleDateFormat("H:mm"); try { Calendar cal = Calendar.getInstance(); Dat
String dtStart = "17:50";
SimpleDateFormat format = new SimpleDateFormat("H:mm");
try {
Calendar cal = Calendar.getInstance();
Date date = format.parse(dtStart);
cal.setTime(date);
System.out.println(cal.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
Thu Jan 01 17:50:00 BRT 1970
这不是错误,您的代码运行良好。如果你想得到当前日期,你必须加上当前日期和1970年1月1日之间的差值 解析后的日期为17:30小时,即17*60*60*1000毫秒+30*60+1000毫秒
这样您就可以找到当前日期:这不是一个错误,您的代码运行良好。如果你想得到当前日期,你必须加上当前日期和1970年1月1日之间的差值 解析后的日期为17:30小时,即17*60*60*1000毫秒+30*60+1000毫秒
通过这种方式,您可以找到当前日期:Anton的建议是正确的,当前日期/次日逻辑是您的自定义实现。您必须检查当前时间,如果超过该时间,请跳到第二天设置警报。安东的建议是正确的,并且当前/第二天逻辑是您的自定义实现。您必须检查当前时间,如果超过该时间,则第二天跳到设置闹钟。java.time
String dtStart = "17:50";
SimpleDateFormat format = new SimpleDateFormat("H:mm");
try {
Calendar cal = Calendar.getInstance();
Date date = format.parse(dtStart);
cal.setTime(date);
System.out.println(cal.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
Thu Jan 01 17:50:00 BRT 1970
你需要一节时间课来表达你的意图。Java最早版本的遗留日期时间类缺少这样一个类。java.sql.Time
类假装这样做,但由于设计决策不当,实际上也包含一个日期
LocalTime
您希望LocalTime
类提供一个不带日期和时区的时间值
它使用通用的24小时单日时钟。时间跨度的加/减可以不分昼夜地进行,因为它没有任何日期的概念
定义与输入字符串匹配的格式模式
DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:mm" ) ; // Uppercase `H` means 24-hour clock, lowercase `h` means 12-hour clock.
String input = "7:50" ;
LocalTime lt = LocalTime.parse( input , f ) ;
解析输入字符串
DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:mm" ) ; // Uppercase `H` means 24-hour clock, lowercase `h` means 12-hour clock.
String input = "7:50" ;
LocalTime lt = LocalTime.parse( input , f ) ;
生成标准格式的字符串
07:50
也许您的业务逻辑需要将一天中的时间分配给一个日期。要确定时间线上的某个时刻或点,还必须指定时区
LocalDate ld = LocalDate.of( 2018 , Month.MARCH , 27 ) ;
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(java.time
您需要一个time of day类来表示您的预期含义。Java最早版本的遗留日期时间类缺少这样一个类。
类假装这样做,但由于设计决策不当,实际上也包含日期Java.sql.time
您希望LocalTime
类提供一个不带日期和时区的时间值 它使用一种通用的24小时单日时钟。由于它没有任何日期概念,时间跨度的加/减会使时钟变得更紧凑 定义与输入字符串匹配的格式模式LocalTime
DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:mm" ) ; // Uppercase `H` means 24-hour clock, lowercase `h` means 12-hour clock.
解析输入字符串String input = "7:50" ; LocalTime lt = LocalTime.parse( input , f ) ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:mm" ) ; // Uppercase `H` means 24-hour clock, lowercase `h` means 12-hour clock.
生成标准格式的字符串 07:50 也许您的业务逻辑需要将一天中的时间分配给一个日期。要确定时间线上的某个时刻或点,您还必须指定一个时区String input = "7:50" ; LocalTime lt = LocalTime.parse( input , f ) ;
LocalDate ld = LocalDate.of( 2018 , Month.MARCH , 27 ) ; ZoneId z = ZoneId.of( "Pacific/Auckland" ) ; ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
classes 从哪里获得java.time类java.sql.*
- ,及以后
- 内置的
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(我尝试了“HH:mm”和“H:mm”,得到了相同的结果,哈哈,问题是你从0得到的结果只有17:50,这就是为什么我尝试了“HH:mm”和“H:mm”,我得到了相同的结果,哈哈,问题是你从0得到的结果只有17:50,这就是为什么
- ,及以后