时间搓到格式化日期转换

 

// 用于时间格式化,针对时间搓转化
export function formatDate (date, str) {
  if (/(y+)/.test(str)) {
    str = str.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  };
  for (let k in o) {
    if (new RegExp(`(${k})`).test(str)) {
      let stry = o[k] + '';
      str = str.replace(RegExp.$1, (RegExp.$1.length === 1) ? stry : padLeftZero(stry));
    }
  }
  return str;
};
function padLeftZero (str) {
  return ('00' + str).substr(str.length);
}

 

原生Spring没有直接支持Fastjson对返回的时间戳进行格式化的功能。然而,可以通过自定义一个ResponseBodyAdvice实现这一功能。 首先,需要创建一个步骤如下的类: ``` @ControllerAdvice public class DateSerializerAdvice implements ResponseBodyAdvice<Object> { private final Converter<String, Date> dateConverter; public DateSerializerAdvice() { this.dateConverter = new DateConverter(); } @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body == null) { return null; } if (body instanceof String) { return body; } if (body instanceof Collection) { Collection<Object> collection = (Collection<Object>) body; collection.forEach(this::serializeTimestampField); return collection; } serializeTimestampField(body); return body; } private void serializeTimestampField(Object object) { try { BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { Method readMethod = propertyDescriptor.getReadMethod(); Method writeMethod = propertyDescriptor.getWriteMethod(); if (readMethod == null || writeMethod == null) { continue; } if (readMethod.getReturnType() != Long.class) { continue; } if (writeMethod.getParameterTypes().length != 1 || writeMethod.getParameterTypes()[0] != Date.class) { continue; } Long timestamp = (Long) readMethod.invoke(object); if (timestamp == null) { continue; } Date date = dateConverter.convert(timestamp.toString()); writeMethod.invoke(object, date); } } catch (Exception e) { // 日志处理 } } } ``` 上述类通过实现ResponseBodyAdvice接口,并重写beforeBodyWrite方法实现了对返回的对象中的时间戳字段进行格式化。 在beforeBodyWrite方法中,先判断返回值类型是否为字符串或者null,如果是则直接返回原值。 如果返回值类型为集合,则遍历集合中的每个元素并调用serializeTimestampField方法进行处理。 serializeTimestampField方法中,我们利用Java内省机制寻找对象中类型为Long的字段,并检查其是否有对应的set方法。如果存在,则调用Fastjson提供的DateConverter将时间戳字符串转换为Date对象,并调用set方法设置格式化好的Date值。 最后,在Spring的配置文件中,通过以下配置将我们的自定义类进行注册: ``` @Configuration public class DateSerializerConfig implements WebMvcConfigurer { @Autowired private DateSerializerAdvice dateSerializerAdvice; @Override public void addInterceptors(InterceptorRegistry registry) { } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { } @Override public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) { handlers.add(dateSerializerAdvice); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { } } ``` 上述配置类中,我们将自定义的类通过addReturnValueHandlers方法添加到返回值处理器中即可。 通过以上步骤,我们就成功实现了原生Spring框架下对返回的时间戳进行格式化的功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值