我遇到了简单日期格式的问题,我不知道为什么。 这是我的算法
if (realtimeDeparture != null) {
int hours = this.realtimeDeparture / 3600;
int minutes = (this.realtimeDeparture % 3600) / 60;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Calendar cal = Calendar.getInstance(Locale.FRENCH);
String date = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH)+1)+ "-" + cal.get(Calendar.DAY_OF_MONTH)+ " " + hours+":"+minutes;
result = df.parse(date);
}
我有一个API,在00h00(realtimeDeparture)之后给我几秒钟 我想从这个整数中提取一个真正的Date对象 所以我做了这个算法,但我放松了一小时,我不知道为什么。
例如,有一些输入和结果值:
date = 2018-5-7 12:26
result = Mon May 07 00:26:00 GMT+02:00 2018
我试图检查07/05/2018是否与7/5/2018不同,但同样的问题:
date = 2018-05-07 12:26
result = Mon May 07 00:26:00 GMT+02:00 2018
如何在00h00之后的几秒钟内获取我的日期对象? 或者我如何修复我的算法?
答案 0 :(得分:1)
您的计算对我来说很好,所以我的猜测是问题是格式化。
您是否尝试过使用
subprojects {
然后用
获取日期cal.set(Calendar.HOUR_OF_DAY, hours);
cal.set(Calendar.MINUTE, minutes);
答案 1 :(得分:1)
使用现代Java日期和时间API的 java.time ,这样更简单,更直接,更不容易出错:
int realtimeDeparture = 44783;
LocalTime time = LocalTime.ofSecondOfDay(realtimeDeparture);
System.out.println(time);
打印:
12时26分23秒
如果你需要今天某个时间的日期,你需要先确定一个时区,例如:
ZoneId zone = ZoneId.of("Asia/Bangkok");
ZonedDateTime dateTime = LocalDate.now(zone).atTime(time).atZone(zone);
System.out.println(dateTime);
2018-05-07T12:26:23 + 07:00 [亚/曼谷]
问题:为什么我需要时区?因为它在世界各地都不是同一个日期。您可以指定ZoneId.systemDefault()
以使用JVM的时区设置,而后者通常来自设备。但是,它可以随时从程序的另一部分或在同一JVM中运行的另一个程序进行更改。
在格式模式字符串中,您使用小写hh
表示小时数,在示例中使用12小时。 {01}在上午或下午从01到12为小时。如果未指定上午或下午,hh
将默认使用AM。 12:26 AM意味着午夜过了26分钟,与24小时制00:26相同。所以这就是SimpleDateFormat
给你的。
你很幸运能够以12小时的时间进行测试。其他小时工作正如你所预料的那样,尽管你有错误。其他人也犯了同样的错误,并且很久没有被注意到了。为了进行比较,现代API会在类似的情况下抛出一个异常,让您知道丢失的AM / PM标记。我显然更喜欢这种行为。
是的,SimpleDateFormat
适用于较旧和较新的Android设备。它只需要至少Java 6 。
java.time
导入日期和时间类。org.threeten.bp
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。答案 2 :(得分:0)
试试这段代码..
String date=" 2018-5-7 12:26";
SimpleDateFormat spf=new SimpleDateFormat("yyyy-mm-dd hh:mm");
Date newDate= null;
try {
newDate = spf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
spf= new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy", Locale.ENGLISH);
date = spf.format(newDate);
System.out.println(date);
然后对象想转换如下代码..
try {
Date dateToshow=spf.parse(date);
Log.d("Date object:",dateToshow.toString());
} catch (ParseException e) {
e.printStackTrace();
}