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);
}
}