有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java只有一个表达式来获取昨天的日期和月份的第一天

我使用的报告工具只支持一行表达式

举个例子,我想知道昨天的日期

类Calendar有一个add方法,但它返回void so

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()

没用

我不知道该怎么做

谢谢


共 (6) 个答案

  1. # 1 楼答案

    假设您想要一个java.util.Date对象(因为您在问题中使用了getTime(),并且返回了java.util.Date),您可以执行以下操作:

    // Get yesterday's date. System.currentTimeMillis() returns the
    // number of milliseconds between the epoch and today, and the
    // 86400000 is the number of milliseconds in a day.
    new Date(System.currentTimeMillis() - 86400000);
    

    哦,之前没有看到您的每月第一天查询。我用util.Date得出了以下结论,但我认为现在是你想改用JodaCalendar的时候了。。。(亲爱的,所以,请不要因为以下可怕的事情而投票否决我……)

    // This will return the day of the week as an integer, 0 to 6.
    new Date(System.currentTimeMillis() - ((new Date().getDate()-1) * 86400000)).getDay();
    
  2. # 2 楼答案

    应按以下步骤进行:

    Calendar cal = Calendar.getInstance();
    cal .add(Calendar.DAY_OF_MONTH,-1);
    cal .getTime();
    

    当你这样做的时候:

    Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()
    

    实际上,您是在请求一个返回void的方法(add())来运行.getTime()。那不行

  3. # 3 楼答案

    使用Joda-Time

    new org.joda.time.DateTime().minusDays(1).toDate();
    
  4. # 4 楼答案

    这是我在JasperReports中使用的:

    // Today
    new java.util.Date().format('yyyy-MM-dd')
    // Yesterday
    new SimpleDateFormat("yyyy-MM-dd").format(new Date()-1)
    
    // First Day of current month
    new java.util.Date().format('yyyy') + "-" + new java.util.Date().format('MM') + "-01"
    

    我更喜欢使用ISO格式YYYY-MM-DD,因为它在任何地方都能被识别,并且避免了区域格式的混淆(日期字段上的位置是dd/mm

  5. # 5 楼答案

    如果它真的必须是一行代码,并且代码是否可以理解并不重要,我认为下面的语句应该有效:

    Date yesterday = new SimpleDateFormat("yyyyMMdd").parse(
        ""+(Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(new Date()))-1));
    

    它将当前日期格式化为“yyyyMMdd”,例如今天的“20100812”,将其解析为int:20100812,减去1:20100811,然后使用之前的格式解析日期“20100811”。如果今天是一个月的第一天,它也会起作用,因为一个月的第0天被宽松的DateFormat解析为上个月的最后一天

    格式“yyyyDDD”也应该适用(D是一年中的一天)

    对于当月的第一天,您可以使用类似的技巧:

    Date firstday = new SimpleDateFormat("yyyyMMdd").parse(
        new SimpleDateFormat("yyyyMM").format(new Date())+"01");
    
  6. # 6 楼答案

    你就不能这样做吗

    new Date( new Date().getTime() - 86400000 );
    

    要获取当前时间,请减去一天中的#毫秒,然后从中构建一个新的日期对象