解决Date对象转变为JSON时变成时间戳的问题

最近用JSON处理Date类型的对象时,发现会变成时间戳的形式,如下图。

这里顺便说一下时间戳的含义,时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起到现在的总秒数。是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

解决方法:关闭时间戳功能,并设置日期格式,这样就能显示出正确的日期格式了。

@Controller
public class UserController {

    @RequestMapping("/test")
    @ResponseBody
    public String json() throws JsonProcessingException{
        ObjectMapper mapper = new ObjectMapper();
        //关闭时间戳的功能
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //转换时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //让mapper指定时间日期格式为SimpleDateFormat
        mapper.setDateFormat(sdf);
        Date date = new Date();
        //将日期对象转换为json字符串格式
        String result =  mapper.writeValueAsString(date);
        return result;
    }
}

这里我们可以将关闭时间戳和设置日期格式的功能封装为一个工具类,实现代码的复用。

public class JsonUtils {

    /**
     * 设置日期格式
     * @param object 传入的待转换格式的日期对象
     * @return json字符串
     */
    public static String getJson(Object object){
        return getJson(object,"yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 设置其他日期格式
     * @param object 传入的待转换格式的日期对象
     * @param dateFormat 自定义的日期格式
     * @return  json字符串
     */
    public static String getJson(Object object,String dateFormat){
        ObjectMapper mapper = new ObjectMapper();
        //关闭时间戳的功能
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //转换时间格式
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        //让mapper指定时间日期格式为SimpleDateFormat
        mapper.setDateFormat(sdf);
        //将日期对象转换为json字符串格式

        try {
            return mapper.writeValueAsString(object);
        }catch (JsonProcessingException e){
            e.printStackTrace();
        }
        return null;
    }
}

然后通过调用工具类的方式就可以直接进行日期格式的转换了。

@Controller
public class UserController {

    @RequestMapping("/test")
    @ResponseBody
    public String json() throws JsonProcessingException{
        return JsonUtils.getJson(new Date());
    }
}

 

 

 

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

java_时间戳Date_相互转化 (2012-02-10 17:54:49) 转载▼ 标签: java 时间戳 date 转换 转化 杂谈 分类: java 1、时间戳的定义   时间戳是指文件属性里的创建、修改、访问时间。 数字时间戳技术是数字签名技术一种变种的应用。在电子商务交易文件中,时间是十分重要的信息。在书面合同中,文件签署的日期和签名一样均是十分重要的防止文件被伪造和篡改的关键性内容。数字时间戳服务(DTS:digital time stamp service)是网上电子商务安全服务项目之一,能提供电子文件的日期和时间信息的安全保护。 编辑本段组成部分   时间戳(time-stamp)是一个经加密形成的凭证文档,它包括三个部分:    (1)需加时间戳的文件的摘要(digest);    (2)DTS收到文件的日期和时间;    (3)DTS的数字签名。    一般来说,时间戳产生的过程:用户首先将需要加时间戳的文件用Hash编码加密形成摘要,然将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息再对该文件加密(数字签名),然送回用户。    书面签署文件的时间是由签署人自己写上的,而数字时间戳则不然,它是由认证单位DTS来加的,以DTS收到文件的时间依据。 2、时间戳转化Date(or String) //时间戳转化Sting或Date SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); Long time=new Long(445555555); String d = format.format(time); Date date=format.parse(d); System.out.println("Format To String(Date):"+d); System.out.println("Format To Date:"+date); 运行结果: Format To String(Date):1970-01-06 11:45:55 Format To Date:Tue Jan 06 11:45:55 CST 1970 3、Date(or String)转化时间戳 //Date或者String转化时间戳 SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); String time="1970-01-06 11:45:55"; Date date = format.parse(time); System.out.print("Format To times:"+date.getTime()); 运行结果: Format To times:445555000 4、注意 定义SimpleDateFormatnew SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );里面字符串头尾不能有空格,有空格那是用转换对应的时间空格也要有空格(两者是对应的),比如: //Date或者String转化时间戳 SimpleDateFormat format = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); String time="1970-01-06 11:45:55"; Date date = format.parse(time); System.out.print("Format To times:"+date.getTime()); 运行结果(报错): Exception in thread "main" java.text.ParseException: Unparseable date: "1970-01-06 11:45:55" 改正: //Date或者String转化时间戳 SimpleDateFormat format = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); String time=" 1970-01-06 11:45:55 ";//注:改正这里前也加了空格 Date date = format.parse(time); System.out.print("Format To times:"+date.getTime()); 运行结果: Format To times:445555000
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值