csdn_sqj
2019-12-15 16:13
采纳率: 60.3%
浏览 548
已采纳

为什么我用cookie保存的日期时间(Date)不对呢?

输出结果:
图片说明

++++++++++++++++++++++++++
源码(这里的排版有问题,不知道怎么调。。。):
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置响应的消息体的数据格式以及编码(为了支持中文)
resp.setContentType("text/html;charset=utf-8");
// 定义一个变量判断是否找到LastTime这个cookie
boolean lasttime = false;
// 1、获取所有cookie
Cookie[] cookies = req.getCookies();
// 2、遍历数组,并且找出其中 name="LastTime" 的键值对
if(cookies != null && cookies.length > 0){
for(Cookie cookie : cookies){
// 找出 LastTime
String name = cookie.getName();
if("LastTime".equals(name)){

                // 如果匹配出来,说明不是第一次访问
                lasttime = true;

                // 设置cookie的value
                // 获取当前时间的字符串,重新设置cookie的值
                Date date = new Date();
                // 设置 日期的输出格式
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日-hh:mm:ss");
                String new_value = sdf.format(date);

                cookie.setValue(new_value);
                // 设置cookie的存活时间
                cookie.setMaxAge(60*60*24);
                // 覆盖原来的value
                resp.addCookie(cookie);

                String value = cookie.getValue();

                // 取出数据
                resp.getWriter().write("<h1>欢迎回来,您上一次访问的时间是:"+value+"</h1>");

                // 找到了就不用再找了
                break;
            }
        }
    }
    if(cookies == null || cookies.length == 0 || lasttime == false){
        // 以上条件都成立,说明是第一次访问

        // 获取当前时间的字符串,重新设置cookie的值
        Date date = new Date();
        // 设置 日期的输出格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日-hh:mm:ss");
        String new_value = sdf.format(date);

        Cookie cookie = new Cookie("LastTime", new_value);
        // 设置cookie的存活时间
        cookie.setMaxAge(60*60*24);
        // 覆盖原来的value
        resp.addCookie(cookie);

        resp.getWriter().write("<h1>您好,欢迎你首次访问</h1>");
    }

}

    ++++++++++++++++++++++++++
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 「已注销」 2019-12-15 18:25
    已采纳

    小写m表示分钟,大写M表示月份

    点赞 打赏 评论
  • 赞同楼上的。代码应该是这样:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日-hh:mm:ss");
    

    处理这种问题思路:应该要先打印默认的date,然后再测试格式化后的日期。

    点赞 打赏 评论
  • 张洪財 2019-12-16 09:03

    大M表示月month, 小m 表示分minutes

    点赞 打赏 评论
  • 灵动领域 2019-12-16 09:30

    格式化不对
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日-hh:mm:ss");

    点赞 打赏 评论

相关推荐