8

java.util.date 的默认格式类似于“Mon May 27 11:46:15 IST 2013”​​。如何将其转换为时间戳并以秒为单位计算相同时间与当前时间之间的差异?

java.util.Date date= new java.util.Date();
Timestamp ts_now = new Timestamp(date.getTime());

上面的代码给了我当前的时间戳。但是,我不知道如何找到上述字符串的时间戳。

4

5 回答 5

12

您可以使用Calendar该类进行转换Date

public long getDifference()
{
    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy");
    Date d = sdf.parse("Mon May 27 11:46:15 IST 2013");

    Calendar c = Calendar.getInstance();
    c.setTime(d);
    long time = c.getTimeInMillis();
    long curr = System.currentTimeMillis();
    long diff = curr - time;    //Time difference in milliseconds
    return diff/1000;
}
于 2013-05-27T16:56:14.957 回答
8

最好的

String str_date=month+"-"+day+"-"+yr;
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date); 
long output=date.getTime()/1000L;
String str=Long.toString(output);
long timestamp = Long.parseLong(str) * 1000;
于 2014-06-23T14:47:52.050 回答
0

您可以使用

  long startTime = date.getTime() * 1000000;;
  long estimatedTime = System.nanoTime() - startTime;

在纳米中获得时间。

Java 文档

于 2013-05-27T16:46:35.530 回答
0

您可以使用DateFormat(java.text.*) 来解析日期:

DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
Date d = df.parse("Mon May 27 11:46:15 IST 2013")

您必须更改区域设置以匹配您自己的区域(这样您将获得 10:46:15)。然后您可以使用相同的代码将其转换为时间戳。

于 2013-05-27T16:57:08.190 回答
0

java.time

我正在提供现代答案。这Timestamp门课的设计总是很糟糕,在已经设计得很糟糕的课程之上,这是一个真正的黑客攻击Date。这两个类现在都已经过时了。不要使用它们。

当问题被问到时,您需要一个Timestamp用于将时间点发送到 SQL 数据库。从 JDBC 4.2 开始,情况不再如此。假设您的数据库需要一个timestamp with time zone(推荐用于真正的时间戳),请将其传递给OffsetDateTime.

在我们可以做到这一点之前,我们需要克服您的示例字符串的一个真正问题,Mon May 27 11:46:15 IST 2013:时区缩写。IST可能意味着爱尔兰夏令时间、以色列标准时间或印度标准时间(我什至读过 Java 可能会将其解析为大西洋/雷克雅未克时区 - 冰岛标准时间?)为了控制解释,我们将首选时区传递给我们的格式化程序用于解析。

    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .appendPattern("EEE MMM dd HH:mm:ss ")
            .appendZoneText(TextStyle.SHORT, Set.of(ZoneId.of("Asia/Kolkata")))
            .appendPattern(" yyyy")
            .toFormatter(Locale.ROOT);
    String dateString = "Mon May 27 11:46:15 IST 2013";
    OffsetDateTime dateTime = formatter.parse(dateString, Instant::from)
            .atOffset(ZoneOffset.UTC);
    System.out.println(dateTime);

此代码段打印:

2013-05-27T06:16:15Z

这是您的字符串的 UTC 等价物(假设 IST 是印度标准时间)。使用其中一种方法(不是)将传递OffsetDateTime给您的数据库。PreparedStatement.setObjectsetTimestamp

如何将其转换为时间戳并以秒为单位计算相同时间与当前时间之间的差异?

使用 java.time 计算以秒为单位的差异非常自然:

    long differenceInSeconds = ChronoUnit.SECONDS
            .between(dateTime, OffsetDateTime.now(ZoneOffset.UTC));
    System.out.println(differenceInSeconds);

刚才运行时,我得到了:

202213260

链接: Oracle 教程:解释如何使用 java.time 的日期时间。

于 2019-10-23T16:38:02.967 回答