如何从用户输入日期中抽出时间?

时间:2015-08-06 06:08:29

标签: java sql xml spring oracle

我有一个程序,允许用户添加一个带有日期,锦标赛名称和位置的活动。每当保存用户输入的日期时,都会有一个我不想要的时间部分。我怎么摆脱它?原始表是在oracle中,我正在使用Spring框架。

enter image description here

JSP页面(只是输入代码)

<td style="border:0px;">
    <select name="month" style="font-family:Arial; font-size:14px; height:28px;">
        <option selected disabled>Month</option>
        <option value="01">January</option><option value="02">February</option><option value="03">March</option>
        <option value="04">April</option><option value="05">May</option><option value="06">June</option>
        <option value="07">July</option><option value="08">August</option><option value="09">September</option>
        <option value="10">October</option><option value="11">November</option><option value="12">December</option> 
    </select>

    <select name="day" style="font-family:Arial; font-size:14px; height:28px;">
        <option selected disabled>Day</option>
        <option value="01">1</option><option value="02">2</option><option value="03">3</option><option value="04">4</option>
        <option value="05">5</option><option value="06">6</option><option value="07">7</option><option value="08">8</option>
        <option value="09">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option>
        <option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option>
        <option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option>
        <option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option>
        <option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option>
        <option value="29">29</option><option value="30">30</option><option value="31">31</option>
    </select>

    <select name="year" style="font-family:Arial; font-size:14px; height:28px;">
        <option selected disabled>Year</option>
        <option value="2015">2015</option><option value="2016">2016</option><option value="2017">2017</option>
        <option value="2018">2018</option><option value="2019">2019</option><option value="2020">2020</option>
    </select>  
</td>

<td style="border:0px;">
    <input id="upcomingTournament" align="middle" name="upcomingTournament" style="padding: 5px 0px 5px 0px; width:500px; height:28px; font-family:Arial; font-size:18px;" type="text"></input>
</td>

<td style="border:0px;">
    <input id="upcomingLocation" align="middle" name="upcomingLocation" style="padding: 5px 0px 5px 0px; width:300px; height:28px; font-family:Arial; font-size:18px;" type="text"></input></th>
</td>

控制器Java文件

@RequestMapping(value = "/NewMatch.do", method = RequestMethod.POST)
public String newMatch(@ModelAttribute("matchForm") MatchesVO searchVO, ModelMap model, HttpServletRequest request) throws Exception {

    String date = request.getParameter("year")+"-"+request.getParameter("month")+"-"+request.getParameter("day");
    searchVO.setUpcomingDate(date);

        if(searchVO.getUpcomingDate()!=null&&searchVO.getUpcomingTournament()!=null&&searchVO.getUpcomingLocation()!=null) {
            sampleService.newUpcomingMatch(searchVO);
            return "forward:/Matches.do";
        }

        else {
            return "sample/NewMatch";
        }

}

SQL XML文件

<insert id="leagueDAO.newUpcomingMatch">

    <![CDATA[

        INSERT INTO UPCOMINGEVENTS 
            (   UPCOMINGDATE
              , UPCOMINGTOURNAMENT
              , UPCOMINGLOCATION )
        VALUES ( #upcomingDate#
               , #upcomingTournament#
               , #upcomingLocation# )

    ]]>

</insert>

3 个答案:

答案 0 :(得分:0)

您需要选择正确的DateFormat以将Date打印为字符串。例如。 'YYYY-MM-DD'

答案 1 :(得分:0)

来自common-lang的

DateUtils提供truncate函数,使用如下:

DateUtils.truncate(yourDate, Calendar.DATE);

您还可以创建Calendar,设置不需要的字段(小时,分钟等)并转换回日期:

Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Date truncated = cal.getTime();

正如评论中已经说明的那样,如果你不需要存储截断日期(没有单一性约束等),你也可以只存储一个有时间的日期,并在你需要显示它时对其进行格式化(参见{{ 3}})。

答案 2 :(得分:0)

您可以更改SQL XML文件中的insert语句,以在插入期间截断日期:

<insert id="leagueDAO.newUpcomingMatch">

    <![CDATA[

        INSERT INTO UPCOMINGEVENTS 
            (   UPCOMINGDATE
              , UPCOMINGTOURNAMENT
              , UPCOMINGLOCATION )
        VALUES ( TRUNC( #upcomingDate# )
               , #upcomingTournament#
               , #upcomingLocation# )

    ]]>

</insert>