您的位置:首页 > 运维架构 > Shell

Joda-Time

2018-01-02 10:59 204 查看
shell date:

1.date -d  @1500000000
2017年 07月 14日 星期五 10:40:00 CST
date -d  @1400000000
2014年 05月 14日 星期三 00:53:20 CST
date -d  @1000000000
2001年 09月 09日 星期日 09:46:40 CST
date -d  @1
1970年 01月 01日 星期四 08:00:01 CST
date -d  @0
1970年 01月 01日 星期四 08:00:00 CST
2.在设定时间方面
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
3.加减
date +%Y%m%d         //显示现在天年月日
date +%Y%m%d --date="-1 day"  //显示前一天的日期
date +%Y%m%d --date="+1 month"  //显示下一月的日期
date +%Y%m%d --date="-1 year"  //显示前一年的日期


Joda-Time :既然无法摆脱时间,为何不设法简化时间处理?

一、java.util.Calendar VS org.joda.time.DateTime

1.构造函数
Calendar calendar = Calendar.getInstance();
calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);

DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);

2.日期运算
Calendar calendar = Calendar.getInstance();
calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
SimpleDateFormat sdf = new SimpleDateFormat("E MM/dd/yyyy HH:mm:ss.SSS");
calendar.add(Calendar.DAY_OF_MONTH, 90);
System.out.println(sdf.format(calendar.getTime()));

DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
System.out.println(dateTime.plusDays(90).toString("E MM/dd/yyyy HH:mm:ss.SSS"));

3.某天的45天之后的某天的下一个月的当前周的最后一天的日期
DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
System.out.println(dateTime.plusDays(45).plusMonths(1).dayOfWeek()
.withMaximumValue().toString("E MM/dd/yyyy HH:mm:ss.SSS"));

4.Joda 和 JDK 互操作性
Calendar calendar = Calendar.getInstance();
DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
System.out.println(dateTime.plusDays(45).plusMonths(1).dayOfWeek()
.withMaximumValue().toString("E MM/dd/yyyy HH:mm:ss.SSS"));
calendar.setTime(dateTime.toDate());


二、Joda 的关键日期/时间概念

不可变性(Immutability):实例无法被修改、线程安全、java.lang.String

瞬间性(Instant):一个瞬间 就是指时间线上只出现一次且唯一的一个时间点

局部性(Partial):时间的一部分片段,将局部时间片段看作一个重复周期中的一点

年表(Chronology):一种日历系统

时区(Time zone):用于计算时间

三、实例 jackson-datatype-joda

1.引入:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.4.0</version>
</dependency>
2.注册:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
3.使用:
public class Bean {
public DateTime start;
}

final String INPUT_JSON = "{\"start\" : \"1972-12-28T12:00:01.000Z\"}";
Bean bean = mapper.readValue(INPUT_JSON, Bean.class);
String json = mapper.writeValueAsString(bean);

jackson-module-parameter-names:添加访问参数名称的支持
public class EnumNamingTest
{
enum SurprisingEnum32 {
@JsonProperty("customValue")
ENUM_NAME;
}
// for [module-parameter-names#32]
@Test
public void testCustomEnumName() throws Exception
{
final String EXP = "\"customValue\"";
// First, verify default handling
String json = new ObjectMapper()
.writeValueAsString(SurprisingEnum32.ENUM_NAME);
assertEquals(EXP, json);
// and then with parameter names module
final ObjectMapper mapperWithNames = new ObjectMapper()
.registerModule(new ParameterNamesModule());
json = mapperWithNames.writeValueAsString(SurprisingEnum32.ENUM_NAME);
assertEquals(EXP, json);
// plus read back:
SurprisingEnum32 value = mapperWithNames.readValue(json, SurprisingEnum32.class);
assertEquals(SurprisingEnum32.ENUM_NAME, value);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell-date joda-time shell