【问题标题】:How to fetch data from DB according to time stamp range in HQL如何根据HQL中的时间戳范围从数据库中获取数据
【发布时间】:2015-02-23 07:28:18
【问题描述】:

我有一个 HQL 查询,它根据用户时间戳从数据库中获取数据。查询工作正常,但没有获取我期望的确切数据。

例如:我通过了 02/16/2015,02/23/2015,我的 jsp 页面中的值作为开始日期和结束日期。我将这些值传递给 HQL。但是我的代码在 2015 年 1 月 16 日之间给出了结果和 2015 年 2 月 23 日。减少 1 个月。所以我想知道我怎样才能达到我的预期。下面是我的代码。谢谢。

 public static List<TestResult> getTestResulDataSet(String sDate,String eDate)  { 
    final Map<String,List<TestResult> > dataSet = new HashedMap();

    DateFormat df = new SimpleDateFormat("mm/dd/yyyy");
     Date date1=null, date2=null;
    String Rsdate=sDate;
    String Redate=eDate;        
        try {
            date1 = (Date) df.parse(Rsdate);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            date2 = (Date) df.parse(Redate);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    final Date date3=date1; 
    final Date date4=date2; 

    Transactions.exec(new Procedure() {
        @Override
        public void execute() throws Throwable {
            List<TestResult> rs = new ArrayList();

            rs = Transactions.getSession().createCriteria(TestResult.class).add(Restrictions.ge("timestamp",date3)).add(Restrictions.le("timestamp",date4)).list();

            dataSet.put("TestResult", rs);

        }
    });

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    正确的日期格式是MM/dd/yyyy

    正确:DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

    mm 代表分钟,MM 代表月份。 官方格式说明:

    Letter  Date or Time Component  Presentation    Examples
    G   Era designator  Text    AD
    y   Year    Year    1996; 96
    Y   Week year   Year    2009; 09
    M   Month in year   Month   July; Jul; 07
    w   Week in year    Number  27
    W   Week in month   Number  2
    D   Day in year Number  189
    d   Day in month    Number  10
    F   Day of week in month    Number  2
    E   Day name in week    Text    Tuesday; Tue
    u   Day number of week (1 = Monday, ..., 7 = Sunday)    Number  1
    a   Am/pm marker    Text    PM
    H   Hour in day (0-23)  Number  0
    k   Hour in day (1-24)  Number  24
    K   Hour in am/pm (0-11)    Number  0
    h   Hour in am/pm (1-12)    Number  12
    m   Minute in hour  Number  30
    s   Second in minute    Number  55
    S   Millisecond Number  978
    z   Time zone   General time zone   Pacific Standard Time; PST; GMT-08:00
    Z   Time zone   RFC 822 time zone   -0800
    X   Time zone
    

    【讨论】:

    • 感谢您的回答,但仍然无法正常工作。问题是我无法获取当前月份的数据。
    • 你确定日期没有修正吗?无论哪种方式,它都是一个错误。假设我的日期为“02/11/2015”,使用 new SimpleDateFormat("mm/dd/yyyy") 的日期为 2015 年 1 月 11 日,小时 00:02:00(2 分钟),同时使用 new SimpleDateFormat(" MM/dd/yyyy") 给出日期 February 11 2015 hour 00:00:00 。有月差。
    • 也许这个问题也可以帮助你:stackoverflow.com/questions/21265134/…
    • 在我将日期格式 mm 更改为 MM HQL 后甚至没有获取任何数据。但没有错误。但是当我给 mm 工作时。但落后一个月。我认为错误是在我的日期格式实施中。当搜索字段时,必须将当前月份值作为 sdate 或 edate,如果不是,它也不起作用。
    • 以前的日期为 2015-01-20 12:29:31.084 即使我发送 02/20/2015 但在将 mm 更改为 MM 后,它发送为 Mon Feb 16 00:00:00 IST 2015 .问题是HQL不起作用。即使没有显示错误。谢谢。
    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多