【问题标题】:Decrement a date in Java减少Java中的日期
【发布时间】:2011-08-13 13:49:33
【问题描述】:

我想从当前时间获取前一天(24 小时)。

例如,如果当前时间是Date currentTime = new Date();

2011-04-25 12:15:31:562 GMT

如何确定时间,即

2011-04-24 12:15:31:562 GMT

【问题讨论】:

    标签: java datetime date utilities


    【解决方案1】:

    java.time

    java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*

    另外,下面引用的是来自home page of Joda-Time的通知:

    请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。

    使用现代日期时间 API java.time 的解决方案:

    import java.time.Instant;
    import java.time.temporal.ChronoUnit;
    
    public class Main {
        public static void main(String[] args) {
            Instant now = Instant.now();
            System.out.println("Now:       " + now);
    
            Instant yesterday = now.minus(1, ChronoUnit.DAYS);
            System.out.println("Yesterday: " + yesterday);
        }
    }
    

    样本运行的输出:

    Now:       2021-07-16T20:40:24.402592Z
    Yesterday: 2021-07-15T20:40:24.402592Z
    

    ONLINE DEMO

    出于任何原因,如果您需要将Instant 的对象转换为java.util.Date 的对象,您可以这样做:

    Date date = Date.from(odt.toInstant());
    

    Trail: Date Time 了解有关现代日期时间 API 的更多信息。


    * 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

    【讨论】:

      【解决方案2】:

      我建议您使用Joda Time 开始,这是一个非常 更好的API。然后你可以使用:

      DateTime yesterday = new DateTime().minusDays(1);
      

      请注意,“昨天的这个时间”并不总是 24 小时前……您需要考虑时区等。您可能需要使用 LocalDateTimeInstant 而不是 DateTime

      【讨论】:

      • Joda-Time 外部 JAR 库的快速下载新链接:URL
      【解决方案3】:

      您可以使用Calendar class

      Calendar cal = Calendar.getInstance();
      cal.setTime ( date ); // convert your date to Calendar object
      int daysToDecrement = -1;
      cal.add(Calendar.DATE, daysToDecrement);
      date = cal.getTime(); // again get back your date object
      

      【讨论】:

        【解决方案4】:

        请在此处查看: Java Date vs Calendar

        Calendar cal=Calendar.getInstance();
        cal.setTime(date); //not sure if date.getTime() is needed here
        cal.add(Calendar.DAY_OF_MONTH, -1);
        Date newDate = cal.getTime();
        

        【讨论】:

          【解决方案5】:

          24 小时和 1 天不是一回事。但你都使用日历:

          Calendar c = Calendar.getInstance();
          c.setTime(new Date());
          c.add(Calendar.DATE, -1);
          Date d = c.getTime();
          

          如果您要返回 24 小时,您将使用 Calendar.HOUR_OF_DAY

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-29
            • 2017-09-21
            • 1970-01-01
            相关资源
            最近更新 更多