在 CN1 上获取没有时间的当前日期
Posted
技术标签:
【中文标题】在 CN1 上获取没有时间的当前日期【英文标题】:Get current Date without time on CN1 【发布时间】:2016-12-31 18:45:00 【问题描述】:我在获取没有时间的日期时遇到了很大的问题,我想将时间设置为 00:00,以便检查日期差异。
到目前为止我的步骤:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date now = new Date();
try
now = dateFormat.parse(dateFormat.format(now));
catch (ParseException e1)
//
这段代码仍然需要时间,我从这个问题How do I get a Date without time in Java? 由 Shobbi 回答了这个类似的代码
我之前有一个更好的结果,但时间仍然设置为 01:00。 有人对我有更好的解决方案吗? 我需要将 SQLite 数据库中的日期与实际日期进行比较。
请记住,CN1 Datelibs 是基于 JDK1.3 的,所以我限制使用方法
【问题讨论】:
你绝对需要dd-MM-yyyy
这个格式吗?
在这种情况下格式并不重要,我只需要检查日期是过去还是将来
我通过将 Date 转换为 Calendar 然后计算 DAY_OF_YEAR 的差异来实现(考虑闰年为 366 天)。给你正确的差异。从 jdk 1.1 起应该可以使用日历类
下一个问题:您是否需要知道日期的过去或过去多远,或者只是过去还是将来?你的问题和评论对我来说似乎是矛盾的。
这里的问题是CN1的Calendar类,有点局限。我有一个方法 new Calendar().getSelectedDay(),但这会导致“Wed Aug 24 01:00:00 CEST 2016”
【参考方案1】:
为什么不使用字符串?如果您使用yyyy-MM-dd
和String.compareTo(otherDateString)
格式,应该会告诉您这两个日期之间的关系(一个在另一个日期之前、之后或同一天)
例如:
String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//get the other date into a string
boolean isInThePast = (today.compareTo(otherDateString) > 0);
【讨论】:
不幸的是,我的 Date 对象没有 compareTo 方法 @kaya 我没有使用日期对象。 是的,你是对的,我错了 =) 测试了你的代码并且它也可以工作 (y)【参考方案2】:您可以像这样比较日期,而无需考虑小时、分钟、秒和毫秒:
public static int daysBetweenNowAndDate(String date, String format)
try
DateFormat dateFormat = new SimpleDateFormat(format); //Change format to your incoming date string format
Calendar now = Calendar.getInstance();
now.set(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DATE), 0, 0, 0);
now.set(Calendar.MILLISECOND, 0);
Calendar otherDate = Calendar.getInstance();
otherDate.setTime(dateFormat.parse(date));
otherDate.set(otherDate.get(Calendar.YEAR), otherDate.get(Calendar.MONTH), otherDate.get(Calendar.DATE), 0, 0, 0);
otherDate.set(Calendar.MILLISECOND, 0);
long divisor = 86400000; // 24 hours (24 * 60 * 60 * 1000)
long num = now.getTime().getTime() - otherDate.getTime().getTime();
return (int) ((num + divisor - 1) / divisor);
catch (ParseException ex)
return -999999;
测试:
System.out.println(daysBetweenNowAndDate("2016-08-22", "yyyy-MM-dd")); //2
System.out.println(daysBetweenNowAndDate("22-08-2016", "dd-MM-yyyy")); //2
System.out.println(daysBetweenNowAndDate("2016-08-22 22:45", "yyyy-MM-dd HH:mm")); //2
System.out.println(daysBetweenNowAndDate("22-08-2016 22:45:00", "dd-MM-yyyy HH:mm:ss")); //2
System.out.println(daysBetweenNowAndDate("2016-08-22 22:45", "dd-MM-yyyy HH:mm:ss")); //-999999 because the format and the date don't correspond
【讨论】:
谢谢你,前四行在这种情况下应该对我有帮助(y) 不客气,如果有帮助,请点赞并标记为答案。 嘿伙计,我复制了您的代码,但出现语法错误:\ "Calendar 类型中的方法 set(int, int) 不适用于第 5 行中的参数 (int, int, int, int, int, int)"。但是您的代码指示了我已经朝着正确的方向(y)。我认为您想在这种情况下单独设置每个值而不是单个方法调用? 我很好奇,您使用的是什么版本的 Java 以及在什么 IDE 上?【参考方案3】:在多方建议后找到答案,谢谢各位
Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR_OF_DAY, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
now.getTime();
这里重要的是导入java.util.Calendar
而不是com.codename1.ui.Calendar
。
还有一点我的错误,在这种情况下,我使用了日历并因使用错误的导入而感到困惑:\
【讨论】:
【参考方案4】:尝试使用可以解决问题的 Joda 时间库
【讨论】:
代号一不支持Joda时间库 哦,是的!我不记得CN1有这个限制,谢谢提醒。但是乔达时间在这种情况下很有用!以上是关于在 CN1 上获取没有时间的当前日期的主要内容,如果未能解决你的问题,请参考以下文章