在 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-ddString.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 上获取没有时间的当前日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有时间的情况下获取当前日期?

Java程序获取没有时间戳的当前日期

用js在网页上显示当前日期和时间,并显示是星期几

如何获取当前日期(没有小时和分钟)?

在 Swift 3 中获取当前日期? [关闭]

在 Bash 中获取日期(当前时间前一天)