【问题标题】:Java Timestamp ComparisonJava 时间戳比较
【发布时间】:2011-07-24 19:23:03
【问题描述】:

我有一个时间戳以 2011-01-23-12.31.45 格式从外部源传递到我的应用程序。我需要将它与当前系统时间戳进行比较,以确保其差异小于 2 分钟。关于如何实现这一点的任何想法?

【问题讨论】:

    标签: java datetime timestamp


    【解决方案1】:

    这是一个日期,而不是时间戳。你可以使用java.text.SimpleDateFormat解析它,使用yyyy-dd-MM-HH.mm.ss格式:

    SimpleDateFormat sdf = new SimpleDateFormat("yyy-dd-MM-HH.mm.ss");
    Date date = sdf.parse(inputDateString);
    long timestamp = date.getTime();
    

    然后比较 - 一分钟有 60 * 1000 毫秒。

    始终首选使用 joda-time 进行日期时间操作 - 它会:

    • 具有数据格式的线程安全实现 - DateTimeFormat(上面的不是线程安全的)
    • 只需执行Minutes.minutesBetween(..) 即可找出两个瞬间之间的分钟数,而不是计算。

    【讨论】:

      【解决方案2】:

      这可以优化,但这是我想出的。它需要一些工作,但它应该让你开始。

      public class Test {
      
      private final String serverValue = "2011-01-23-12.31.45"; //Old should fail
      private final String serverValueNew = "2011-03-28-14.02.00"; //New
      
      private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss");
      
      
      public boolean plusMinusTwoMins(String serverValue) {
          boolean withinRange = false;
          Date now = Calendar.getInstance().getTime();
          Date serverDate = now;
      
          try {
              serverDate = dateFormat.parse(serverValue);
          } catch (ParseException e) {
              e.printStackTrace();
          }
      
          long millis = Math.abs(now.getTime() - serverDate.getTime());
          System.out.println("Millis: " + millis);
      
          //1000ms * 60s * 2m
          if (millis <= (1000 * 60 * 2)) {
              withinRange = true;
          }
      
          return withinRange;
      }
      
      public static void main(String[] args) {
          Test test = new Test();
          boolean value = test.plusMinusTwoMins(test.serverValue);
          System.out.println("Value: " + value);
          boolean value2 = test.plusMinusTwoMins(test.serverValueNew);
          System.out.println("Value2: " + value2);
      }
      

      }

      【讨论】:

      • 小心静态SimpleDateFormat - 它不是线程安全的。
      • 是的,我写得很快。只是试图给出实现这一目标的方法之一的想法。我投票赞成你的答案。几乎相同的想法,但线程安全需要 joda 时间。
      猜你喜欢
      • 2015-09-22
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多