【问题标题】:Convert java.util.date default format to Timestamp in Java将 java.util.date 默认格式转换为 Java 中的时间戳
【发布时间】:2013-05-22 13:18:45
【问题描述】:

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());

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

【问题讨论】:

  • Java string to date conversion 的可能重复项
  • 恐怕不行,我正在研究时间戳格式。
  • SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy");这就是我需要的..(查看格式类型)但是,您提供的链接使用 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");不适合我的情况。
  • 还有 thisthisthisthisthis 的副本等等。

标签: java date time timestamp java.util.date


【解决方案1】:

你可以使用

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

在纳米中获得时间。

Java Docs

【讨论】:

  • 它是如何转换我传递的字符串的?
  • 我想将“Mon May 27 11:46:15 IST 2013”​​这个字符串转换为时间戳。并找出它与当前时间之间的差异......也以秒为单位。
  • 我是数据库怪胎...Java 让我很困惑。
  • 感谢@Nidhin,我在下面找到了 Salem 和 Rahul 的答案。感谢您的快速帮助。 :)
【解决方案2】:

你可以使用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;
}

【讨论】:

  • 虽然我正在尝试将“Mon May 27 11:46:15 IST 2013”​​字符串转换为最新。它给了我一个不可解析的字符串异常。知道我该怎么做吗?
  • @Swat:更新了答案。
  • 非常感谢@Rahul。实际上,我将您的答案与上面塞勒姆的答案结合起来,以解决这个问题。谢谢! :)
【解决方案3】:

您可以使用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)。然后您可以使用相同的代码将其转换为时间戳。

【讨论】:

  • 谢谢!我将您的答案与@Rahul 一起使用来做到这一点。
【解决方案4】:

最好的一个

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;

【讨论】:

    【解决方案5】:

    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);
    

    这个 sn-p 打印:

    2013-05-27T06:16:15Z

    这是您的字符串的 UTC 等效值(假设 IST 是印度标准时间)。使用PreparedStatement.setObject 方法之一(不是setTimestamp)将OffsetDateTime 传递到您的数据库。

    如何将其转换为时间戳并以秒为单位计算 同一时间和当前时间的区别?

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

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

    刚刚运行时我得到了:

    202213260

    链接: Oracle tutorial: Date Time 解释如何使用 java.time。

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 2017-04-18
      • 2018-03-06
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多