【问题标题】:converting timestamp to date in java在java中将时间戳转换为日期
【发布时间】:2012-08-01 10:31:53
【问题描述】:

这是我的数据库:

这里我要查看查询当前日期+状态=Q信息并获取计数值。

这是我的代码:

public class TodayQ {
    public int data() {
         int count=0;
        Date date = new Date(timestamp);
DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
System.out.println( dateFormat.format (date));

        // count++;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/pro", "root", "");

            PreparedStatement statement = con
                    .prepareStatement("select * from orders where status='Q' AND date=CURDATE()");
            ResultSet result = statement.executeQuery();
            while (result.next()) {
                // Do something with the row returned.
                count++; // if the first col is a count.
            }

        }

        catch (Exception exc) {
            System.out.println(exc.getMessage());
        }

        return count;
    }

}

这里我要编辑日期是(yyyy-mm-dd)格式。现在我得到了输出。但我希望在我的数据库上使用时间戳。那么如何在 Java 中将时间戳转换为日期。如何在我的代码中使用该代码?

【问题讨论】:

  • Java 中有 TimeStamp 类可能是 sql.timestamp .. 看看这可能对你有帮助。
  • 检查此链接以将时间戳转换为日期。 [时间戳到日期][1] [1]:stackoverflow.com/questions/2318719/…
  • 日期列是什么SQL类型?
  • 这不是答案。 日期列是什么 SQL 类型?
  • @krishnaveni 你想要什么样的例子?

标签: java mysql web-services soap valueconverter


【解决方案1】:

您可以使用 mysql 函数实现相同的目的。希望以下查询为您提供所需的输出。

select * 
from orders
where status='Q' AND 
      date_format(from_unixtime(date),'%Y-%m-%d') = current_date;

【讨论】:

  • 您好,如何获取本月的计数值。我必须使用下面的查询。select * from orders where status='Q' AND DATE_FORMAT(FROM_UNIXTIME(date),'%Y-%m -%d')=MONTH(date) = MONTH(CURDATE()) AND YEAR(date) = YEAR(CURDATE())。但没有给我正确的计数值。只显示 0。
  • 此查询适合您。 select count(1) from orders where status='Q' AND DATE_FORMAT(FROM_UNIXTIME(ts),'%Y-%m')= DATE_FORMAT(now(), '%Y-%m')
【解决方案2】:
Date date = new Date(timestamp);

而时间戳是一个长变量

【讨论】:

  • 我得到了 dis 异常错误:java.util.Date.parse(Date.java:598) at java.util.Date. 的线程“main”java.lang.IllegalArgumentException 中的异常(Date.java:255) 在 com.xcart.TodayQ.data(TodayQ.java:16) 在 com.xcart.Demo.main(Demo.java:5)
  • 你确定你的变量是“long”类型的吗?因为您的 stackTrace 说它正在进入 parse 方法,这可能表明您正在将字符串传递给构造函数
  • 现在我得到的输出总是显示 1970-01-01 0...我无法理解 dis。检查查询并只给我计数。该怎么做
  • Alexander Pogrebnyak 的回答对我来说是最准确的。
【解决方案3】:

假设时间戳是以毫秒为单位的时间,您可以使用 java.util.Calendar 将时间戳转换为日期时间,如下所示:

java.util.Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
java.util.Date date = cal.getTime();

【讨论】:

    【解决方案4】:

    看起来您看到的整数值是 UNIX 自纪元开始以来的秒数(即 1970-01-01T00:00:00Z )-> http://en.wikipedia.org/wiki/Unix_epoch

    我不知道mysql JDBC驱动是否会为你转换这个字段。如果是,获取其值的首选方法是:

    java.sql.Timestamp ts = result.getTimestamp( columnNumber );
    

    Timestamp 扩展了 java.util.Date,因此您可以在需要常规 java.util.Date 的地方使用它。

    如果无论出于何种原因这不会产生所需的结果,则将列值设为long 并将该值调整为毫秒。你很幸运,因为 Java 和 UNIX 的时代同时开始(Java 更精确)。

    long ts = result.getLong( columnNumber ) * 1000L;
    
    java.util.Date date = new java.util.Date( ts );
    

    【讨论】:

    • 这可能是这个问题最准确的答案。
    【解决方案5】:

    打印 yyyy-mm-dd 中的时间戳:

    Date date = new Date(timestamp);
    DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
    System.out.println( dateFormat.format (date));
    

    更新

    这里是您如何进行的提示:

    public static int data() {
        int count = 0;
        Date now = Calendar.getInstance().getTime();
        System.out.println("TODAY IS:"+now.getTime()); //TODAY IS:1344007864862
    
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
    
            PreparedStatement statement1 = (PreparedStatement) con.prepareStatement("SELECT * FROM ORDERS WHERE STATUS = 'Q' AND DT= "+now.getTime());
            ResultSet rs1 = statement1.executeQuery();
            while (rs1 .next()) {
                count++; //A HIT IS FOUND
            }
        } catch (Exception exc) {
            System.out.println(exc.getMessage());
        }
        return count;
    }
    

    显然 now.getTime() 返回在 now 变量中捕获日期的实际毫秒数。从现在开始,数学完全取决于您的实施。

    请记住,在午夜(2012 年 10 月 5 日 00:00:00)获取日历对象的方法在这里Java program to get the current date without timestamp

    【讨论】:

    • 它也得到以下异常:java.util.Date.parse(Date.java:598) at java.util.Date.(Date.java:255) 在 com.xcart.TodayQ.data(TodayQ.java:16) 在 com.xcart.Demo.main(Demo.java:5)
    • 您确定时间戳有效吗?发布生成异常的时间戳值
    • 现在我得到的输出总是显示 1970-01-01 0...我无法理解 dis。检查查询并只给我计数。该怎么做
    • Alexander Pogrebnyak 的回答对我来说是最准确的。
    【解决方案6】:

    数据库中的日期列应该是TIMESTAMPDATETIME

    它们分别以java.sql.Timestampjava.sql.Datejava.sql.Time 检索。

    所有这些类都扩展java.util.Date

    所以数据应该已经是您要求的格式。

    所以没什么可做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-16
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2015-01-20
      • 2012-08-04
      • 1970-01-01
      相关资源
      最近更新 更多