import java.time.Duration;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DurationFormatUtils; @Slf4j
public class TimeHelper { public static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[XXX][X]"); public static Instant parseTimeStamp(String timeStamp) {
return OffsetDateTime.parse(timeStamp, FORMATTER).toInstant();
} public static String getDuration(String startTimeStamp, String endTimeStamp) {
String duration = "";
try {
duration =
DurationFormatUtils.formatDurationWords(
Duration.between(parseTimeStamp(startTimeStamp), parseTimeStamp(endTimeStamp))
.toMillis(),
true,
true);
} catch (NullPointerException | DateTimeParseException e) {
log.error(e.getMessage(), e);
}
return duration;
}
}
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Optional;
import java.util.Set; private static final DateTimeFormatter VALUATION_TIMESTAMP_PARSER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS][xxx][xx][X]"); private Instant getTimeStampAsInstant(String timeStamp) {
return Optional.ofNullable(timeStamp)
.map(VALUATION_TIMESTAMP_PARSER::parse)
.map(Instant::from)
.orElse(null);
}
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.Instant; @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS[xxx][xx][X]")
private Instant valuationTimeStamp;
private static final DateTimeFormatter VALUATION_TIMESTAMP_PARSER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS][xxx][xx][X]");
import java.time.Duration;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DurationFormatUtils; @Slf4j
public class TimeHelper { public static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[XXX][X]"); public static Instant parseTimeStamp(String timeStamp) {
return OffsetDateTime.parse(timeStamp, FORMATTER).toInstant();
} public static String getDuration(String startTimeStamp, String endTimeStamp) {
String duration = "";
try {
duration =
DurationFormatUtils.formatDuration(
(Duration.between(parseTimeStamp(startTimeStamp), parseTimeStamp(endTimeStamp))
.toMillis()),
"d'd' HH'h' mm'm' ss's'");
} catch (NullPointerException | DateTimeParseException e) {
log.error(e.getMessage(), e);
}
return duration;
}
}

TimeHelper的更多相关文章

  1. [时间操作] C#TimeHelper时间格式化帮助类 (转载)

    点击下载 TimeHelper.rar 主要功能如下 .将时间格式化成 年月日 的形式,如果时间为null,返回当前系统时间 .将时间格式化成 时分秒 的形式,如果时间为null,返回当前系统时间 . ...

  2. c#关于时间TimeHelper类的总结

    using System; namespace DotNet.Utilities{    /// <summary>    /// 时间类    /// 1.SecondToMinute( ...

  3. 从零开始编写自己的C#框架(22)——添加普通列表页面

    普通列表页面指的是上一章那种有层次感列表以外的正常列表页面,由于上一章已讲解了正常添加页面的相关操作了,所以部分相关的操作本章节就不再罗嗦重复一次了.大家可以试试先用本章内容中的一些简单介绍,自己使用 ...

  4. 使用C#把发表的时间改为几年前,几个月,几天前,几小时前,几分钟前,或几秒前

    我们在评论中往往会看到多少天前,多少小时前. 实现原理:现在时间-过去时间 得到的时间差来做比较 下面我定义了一个Helper类,大家直接引用即可,参数就是时间差,注意时间差类型是TimeSpan类型 ...

  5. 如何解决CRUD操作中与业务无关的字段赋值

    提高效率一直是个永恒的话题,编程中有一项也是可以提到效率的,那就是专注做一件事情,让其它没有强紧密联系的与之分开.这里分享下我们做CRUD时遇到的常见数据处理场景: 数据库表字段全部设计为非空,即使这 ...

  6. 使用ImitateLogin模拟登录百度

    在之前的文章中,我已经介绍过一个社交网站模拟登录的类库:imitate-login ,这是一个通过c#的HttpWebRequest来模拟网站登录的库,之前实现了微博网页版和微博Wap版:现在,模拟百 ...

  7. lucene.net 使用过程中的 几个注意事项(含termquery 和QueryParser 的区别)

    几个注意事项1.建立索引时 插入的顺序(不设置document和字段的boost) 会影响到 查询结果的默认排序,建议:将最新生成的文章 最后建索引 这样 查询结果首先显示的是 最后插入的数据2.Bo ...

  8. c# 计算两日期的工作时间间隔(排除非工作日)及计算下一个工作时间点.

    一个日期段如工作时间为 8:00 至 17:00 public class TimeHelper { /// <summary> /// 计算时间间隔 /// </summary&g ...

  9. iOS开发——时间格式类

    目前只实现了三个类方法, 第一个获取当前时间,以字符创的形式返回,例如"201606161532" 第二个以当前时间与给定时间的时间差(秒) 第三个以当前时间与给定时间的时间差(分 ...

随机推荐

  1. scala通过尾递归解析提取字段信息

    一.背景 获取数据中以“|”作为字段间的分隔符,但个别字段中数据也是以“|”作为分隔符.因此,在字段提取时需要保护数据完整性. 二.实现 1.数据以“|”分隔,可以采用递归方式迭代解析.通过尾递归方式 ...

  2. NOI2019退役记

    Day0 时光荏苒,日月如梭.人生中第二次也是最后一次全国赛开始了. 坐6h高铁+1h大巴来到gzez,热死.室友是A类的Gloid和C类的仓鼠,我寝室是为数不多(或许只有1个)的凑齐了ABC三种类别 ...

  3. xv6 系统调用

    1. 系统调用的实现 开发程序需所有的接口在user.h中,包含两部分system call和ulib user.h中的系统接口函数在usys.S中通过汇编实现 #define SYSCALL(nam ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL 删除数据库

    使用普通用户登陆 MySQL 服务器,可能需要特定的权限来创建或者删除 MySQL 数据库,所以使用 root 用户登录,root 用户拥有最高权限. 在删除数据库过程中,务必要十分谨慎,因为在执行删 ...

  5. SQL基础教程(第2版)第6章 函数、谓词、CASE表达式:6-2 谓词

    ● 谓词就是返回值为真值的函数. ● 可以将子查询作为IN和EXISTS的参数. 本节将会和大家一起学习 SQL 的抽出条件中不可或缺的工具——谓词(predicate).例如, =. <. & ...

  6. 18 11 13 装了ssd 继续 网络通信 tcp 客户端的创建

    import socket def main(): # 1. 买个手机(创建套接字 socket) 联通公司建立了一个信号塔 tcp_server_socket = socket.socket(soc ...

  7. uWSGI调整buffer-size

    https://uwsgi-docs.readthedocs.io/en/latest/Options.html#buffer-size buffer-size argument: required_ ...

  8. Django-rest framework框架的三大认证组件

    源码分析:三大认证组件的封装 组件的认证配置: 模型层:models.py class User(BaseModel): username = models.CharField(verbose_nam ...

  9. saturates|meteoric|enclose|marooned|predators|Pioneer community|salinization|condenser|embodied

    saturates渗透 meteoric蒸汽 enclose包围 Pioneer community 先锋群落 Climax community顶级群落 cumulative积累 Rebound 回弹 ...

  10. JavaWeb中的高级知识总结

    知识结构图 文件下载 默认情况下,如果浏览器可以处理Content-Type响应头中指定数据类型,浏览器就会直接处理,比如显示出HTML页面(text/html),或者显示出照片(image/png) ...