【问题标题】:How to validate the unix timestamp in java?如何在java中验证unix时间戳?
【发布时间】:2011-10-07 16:33:12
【问题描述】:

我需要验证给定的输入字符串是有效的Timestamp(以毫秒为单位)。

例如,如果给定的Timestamp

String time ="1310966356458";

那么它应该返回 true。

如果

String time ="1000";

那么它应该返回false;

请帮忙。提前致谢

【问题讨论】:

  • 为什么 1000 不是有效的时间戳? 1.1.1970 0:00 后 1000 毫秒?
  • 为什么1000 不是一个有效的时间戳?它是Thu Jan 01 00:00:01 +0000 1970。事实上,任何有效的整数(甚至是负数)都是有效的 UNIX 时间戳。
  • 纪元后 1000 毫秒仍然是有效的时间戳。您应该定义一系列合理的时间戳。合理的范围是特定于案例的,例如,您可能期望 2010 年之后的条目。
  • 请帮助如何定义正确的时间戳范围

标签: java unix-timestamp


【解决方案1】:

我们无法告诉您什么对您的应用程序是明智的。如果存在适用于每种情况的限制,它将被内置。可能只有在您开发应用程序之后而不是将来的时间戳是合理的。

public static final String RELEASE_DATE = "2011/06/17";
private static final long MIN_TIMESTAMP;

static {
    try {
        MIN_TIMESTAMP = new SimpleDateFormat("yyyy/MM/dd").parse(RELEASE_DATE).getTime();
    } catch (ParseException e) {
        throw new AssertionError(e);
    }
}

// after the software was release and not in the future.
public static final boolean validTimestamp(long ts) {
    return ts >= MIN_TIMESTAMP && ts <= System.currentTimeMillis();
}

但是,时间戳可能代表某人的出生时间。在这种情况下,最小时间戳可能是负数。

时间戳可能是某些东西过期的时间(比如门票),有些会在过去(可能不会在今年之前),有些会在未来。 (可能提前不超过 2 年。)


时间可以是负数。人类在 1970 年之前登陆月球,因此时间戳为负数。

String MAN_ON_MOON = "1969/07/21 02:56 GMT";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm Z");
System.out.println(sdf.parse(MAN_ON_MOON).getTime());

打印

-14159040000

【讨论】:

  • 赞成纯粹的常识。
【解决方案2】:

为什么不从给定的时间中减去纪元时间。如果结果是否定的,那么它是无效的。

【讨论】:

  • ...除非你能有 1970 年之前的时间。;)
  • 他要的是 Java 而不是汇编器 ;-)
  • 彼得,你需要一杯咖啡。 :) 人类是否在 1970 年 1 月 1 日午夜之前登陆月球? 0 - -1415094000 = 1415094000,表示登月发生在之前。请记住,在数学中,两个负数就是一个正数,即使你的学校老师会说,两个错就是对!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 2011-08-19
  • 2012-09-07
  • 2016-08-05
  • 2015-11-04
  • 1970-01-01
  • 2015-10-09
相关资源
最近更新 更多