java里显示时间的命令_enjoy扩展指令=模仿微信时间显示

页面简单调用:me.addDirective("fromday", FromDayDirective.class);#fromday("2019-01-14 12:00:00") //字符串

#fromday(传入的date类型的字段)import com.jfinal.template.expr.ast.Expr;

import com.jfinal.template.expr.ast.ExprList;

import com.jfinal.template.io.Writer;

import com.jfinal.template.stat.ParseException;

import com.jfinal.template.stat.Scope;

import java.io.IOException;

import java.time.Duration;

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.ZoneId;

import java.time.format.DateTimeFormatter;

import java.time.temporal.TemporalAccessor;

import java.util.Date;

public class FromDayDirective extends Directive {

private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

private static final DateTimeFormatter _time = DateTimeFormatter.ofPattern("HH:mm");

// valueExpr 能为 string,or date

private Expr valueExpr;

private int paraNum;

@Override

public void setExprList(ExprList exprList) {

//参数长度

this.paraNum = exprList.length();

if (paraNum != 1) {

throw new ParseException("#fromday 参数错误", location);

}

valueExpr = exprList.getExpr(0);

}

@Override

public void exec(Env env, Scope scope, Writer writer) {

try {

showDate(env, scope, writer);

} catch (IOException e) {

e.printStackTrace();

}

}

private void showDate(Env env, Scope scope, Writer writer) throws IOException {

Object value = valueExpr.eval(scope);

if (!(value instanceof Date) && !(value instanceof String)) {

throw new ParseException("#fromday 参数错误", location);

}

//结束时间

LocalDateTime now = LocalDateTime.now();

if (value instanceof Date) {

LocalDateTime thisValue = LocalDateTime.ofInstant(((Date) value).toInstant(), ZoneId.systemDefault());

write(writer, now, thisValue);

} else {

TemporalAccessor parse = formatter.parse((String) value);

LocalDateTime thisValue = LocalDateTime.from(parse);

write(writer, now, thisValue);

}

}

private void write(Writer writer, LocalDateTime now, LocalDateTime thisValue) throws IOException {

Duration between = Duration.between(thisValue, now);

//小于1分钟

long l = between.toMinutes();

if (l 

writer.write("刚刚");

return;

}

//小于1小时

long l1 = between.toHours();

if (l1 

writer.write(between.toMinutes() + "分钟前");

return;

}

LocalDate time2 = thisValue.toLocalDate();

LocalDate now2 = now.toLocalDate();

if (time2.equals(now2)) {

writer.write(_time.format(thisValue));

return;

}

writer.write(formatter.format(thisValue));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值