版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自http://javaexception.com/archives/175

Java日期处理组件joda-time

平常在开发过程中,处理日期时间,基本上会使用SimpleDateFormat来处理,用这个也还行,不过有时候想找个强力点的工具类,关于时间日期处理的,我期望的是,对于给定的时间戳或者是一串字符串的时间格式,能够有强大的Api,可以方便的帮我解析出年月日,时分秒,此外也可以知道这个时间戳对应的是这一年的第多少天,这个月的多少天等等。经过一番调研,发现Java的第三方框架中,有一个joda-time,这个日期处理组件对时间日期解析做了增强,功能真的很强大,这里推荐给大家使用。

从16年到现在,这个组件我在很多个项目中使用。接下来用一个常见的需求场景,展示joda-time的部分用法。

如下图所示,我想要实现图中的时间展示效果,下午6:47,晚上9:09,上午11:48等

完整的代码如下:

public static String getTimeString2(String time) {
long timeMills = Long.parseLong(time);
DateTime dateTime = new DateTime(timeMills);
int hourOfDay = dateTime.getHourOfDay();
int hourOfDayOf12 = hourOfDay;
int minute = dateTime.getMinuteOfHour();
String extra = "";
if (hourOfDay == 0) {
extra = "凌晨";
hourOfDayOf12 = 12;
} else if (hourOfDay > 0 && hourOfDay < 12) {
extra = "上午";
} else if (hourOfDay >=12 && hourOfDay < 13) {
extra = "中午";
} else if (hourOfDay > 13 && hourOfDay <= 18) {
extra = "下午";
hourOfDayOf12 = hourOfDay - 12;
} else if (hourOfDay > 18 && hourOfDay <= 23) {
extra = "晚上";
hourOfDayOf12 = hourOfDay - 12;
}
String prefixMinute = "";
if (minute < 10) {
prefixMinute = "0";
}
return extra + hourOfDayOf12 + ":" + prefixMinute + minute;
}

joda-time中,常用的Api是DateTime,一般情况下,我们可以将long类型的时间戳传入DateTime的构造方法,之后就可以通过DateTiem的对象获取到各种关于日期时间的值

dateTime.getHourOfDay();//当天几点
dateTime.getMinuteOfHour();//这个小时内的分钟数
dateTime.getYear();//哪一年
dateTime.getMonthOfYear();//月份
dateTime.getDayOfMonth();//这个月的几号
dateTime.getDayOfYear();//这一年的第几天
DateTime.now().getDayOfYear();//获取当天是这一年的第几天

接着再看另外一个图片的效果,这个图片展示的效果,我期望的是显示具体的年月日,还有昨天,以及如果是当天的话,展示当天的上午中午下午具体时间。

完整的代码如下:

public static String getTimeString(String time) {
long timeMills = Long.parseLong(time);
DateTime dateTime = new DateTime(timeMills);
int year = dateTime.getYear();
int month = dateTime.getMonthOfYear();
int dayOfMonth = dateTime.getDayOfMonth();
int dayOfYear = dateTime.getDayOfYear();
int nowDayOfYear = DateTime.now().getDayOfYear();
if (dayOfYear <= nowDayOfYear) {
if (dayOfYear == nowDayOfYear) {
return getTimeString2(time);
} else if (nowDayOfYear - dayOfYear == 1) {
return "昨天";
} else {
return year + "/" + month + "/" + dayOfMonth;
}
}
return year + "/" + month + "/" + dayOfMonth;
}

这里面关于判断是否是今天的判断用的就是

dateTime.getDayOfYear()
if(dateTime.getDayOfYear() == DateTime.now().getDayOfYear());//表示就是今天

对于joda-time,还有很多其他的Api没有介绍,这个就等有需求场景的时候在去研究吧,joda-time对于字符串的时间解析也很强力。这个可以大家去研究。

Github项目地址

https://github.com/JodaOrg/joda-time

Java日期处理组件joda-time的更多相关文章

  1. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

  2. java日期处理总结(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzUAAAG1CAIAAABPoU1KAAAgAElEQVR4nOy9e1xU1d747znP9/V9nu

  3. java日期详解

    [TOC] 一.简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的地位比如joda. 文章主要对java日期处理的详解,用1.8可以不用joda. 1. 相关概念 首先 ...

  4. Java 日期处理类库Joda-Time简介

    http://www.ibm.com/developerworks/cn/java/j-jodatime.html 登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 搜索 devel ...

  5. 全面解析Java日期时间API

    时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time ...

  6. react-native DatePicker日期选择组件的实现

    本教程的实现效果如下: 为了实现其淡入/淡出的覆盖效果, 还有取消按钮, 在此用了一个三方的组件, 大家可以先安装一下: 三方组件的地址:https://github.com/eyaleizenber ...

  7. [转]Java日期时间使用总结

    原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...

  8. java日期操作大全

    摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http ...

  9. java中解决组件重叠的问题(例如鼠标移动组件时)

    java中解决组件覆盖的问题!     有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序) ...

随机推荐

  1. 使用VMware安装CentOS 7

    环境:Windows10 , VMware Workstation 15 Player, CentOS 7 为什么选择CentOS ? 主流: 目前的Linux操作系统主要应用于生产环境,主流企业级L ...

  2. 使用 mitmdump 进行 selenium webDriver绕过网站反爬服务的方法 pdd某宝 可用

    安装:  pip install  mitmproxy 新建一个脚本 脚本代码: from mitmproxy import ctx injected_javascript = ''' // over ...

  3. zabbix获取一周内各个等级告警的次数

    # encoding:UTF-8 import xlsxwriter import datetime import pymysql import numpy as np import pandas _ ...

  4. gitlab忘记密码如何重置

    gitlab web登入密码忘记以后可以用如下方式修改密码shell>cd /home/git/gitlabshell> su gitshell>bundle exec rails ...

  5. C# SendAysnc 超时

      业务方法 @@@code public override async Task<List<(IPEndPoint endPoint, byte[] data)>> Send ...

  6. [20191127]探究等待事件的本源4.txt

    [20191127]探究等待事件的本源4.txt --//昨天使用ash_wait_chains.sql脚本把各个生产库执行1遍,才发现我对一套系统性能理解错误.--//我一直以为这套系统存储有点问题 ...

  7. 经典案例:如何优化Oracle使用DBlink的SQL语句

    转自 https://blog.csdn.net/Enmotech/article/details/78788083 作者介绍 赵全文 就职于太极计算机股份有限公司,在中央电化教育馆做Oracle D ...

  8. MySQL数据库:子查询的应用

    子查询 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. # 子查询的用法 # 在字段 select (select cNam ...

  9. 损失函数———有关L1和L2正则项的理解

    一.损失函: 模型的结构风险函数包括了   经验风险项  和  正则项,如下所示: 二.损失函数中的正则项 1.正则化的概念: 机器学习中都会看到损失函数之后会添加一个额外项,常用的额外项一般有2种, ...

  10. VM虚拟机安装无法将值写入注册表.....请确认你是否有足够的权限访问该注册表项,或者与技术支持人员联系。

    解决方法: 关掉360安全卫士等软件再安装