joda-time使用
SimpleDateFormat是线程安全的吗?
非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐 joda-time 库。
import com.google.api.SystemParameterOrBuilder;
import org.joda.time.DateTime;
import org.joda.time.DateTimeUtils;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import top.sponger.fabric.sdk.common.Constants;
import java.util.Locale;
/**
* Joda-Time 使用总结
* https://segmentfault.com/a/1190000003974016
*/
public class JodaTimeTest {
public static void main(String[] args) {
/**
* 得到当前时间
* */
System.out.println();
DateTime dateTime = new DateTime();
// datetime默认的输出格式为yyyy-MM-ddTHH:mm:ss.SSS
System.out.println("得到当前时间: "+dateTime.toString());
//yyyy-MM-dd HH:mm:ss
System.out.println("得到当前时间: "+dateTime.toString(Constants.TimeFormat.DATE.getFomat()));
System.out.println("==========================================");
/**
* 指定某个时间
* */
System.out.println();
DateTime dateTime1 = new DateTime(1472457422728L);
DateTime dateTime2 = new DateTime(2016, 8, 29, 15, 57, 2);
System.out.println("指定某个时间: "+dateTime1.toString(Constants.TimeFormat.DATE.getFomat()));
System.out.println("指定某个时间: "+dateTime2.toString(Constants.TimeFormat.DATE.getFomat()));
System.out.println("==========================================");
/**
* 输出locale 输出某年某月某日 某时:某分:某秒 星期几
* */
System.out.println();
System.out.println("输出locale 输出某年某月某日 某时:某分:某秒 星期几: "+new DateTime().toString(Constants.TimeFormat.DATE_WEEK.getFomat(), Locale.CHINESE));
System.out.println("==========================================");
/**
* 输出星期几
* */
System.out.println();
System.out.println("输出星期几: "+new DateTime().toString(Constants.TimeFormat.WEEK_CHAR.getFomat()));
System.out.println("输出星期几: "+new DateTime().toString(Constants.TimeFormat.WEEK.getFomat(),Locale.CHINESE));
System.out.println("输出星期几: "+new DateTime().toString(Constants.TimeFormat.WEEK.getFomat(),Locale.ENGLISH));
System.out.println("==========================================");
/**
* 计算两个日期相隔的天数
* */
System.out.println();
LocalDate start = new LocalDate(2019,5,10);
LocalDate end = new DateTime().toLocalDate();
// 这里要求start必须早于end,否则计算出来的是个负数
System.out.println("计算两个日期相隔的天数: "+Days.daysBetween(start ,end).getDays());
System.out.println("==========================================");
/**
* 对日期的加减操作
* */
System.out.println();
DateTime dateTime3 = new DateTime();
dateTime3 = dateTime3.plusYears(1) //增加年
.plusMonths(1) //增加月
.plusDays(1) //增加日
.minusHours(1) //减小时
.minusMinutes(1) //减分钟
.minusSeconds(1); //减秒数
System.out.println("对日期的加减操作: "+dateTime3.toString(Constants.TimeFormat.DATE.getFomat()));
System.out.println("==========================================");
/**
* 判断是否是闰月
* */
System.out.println();
DateTime dateTime4 = new DateTime();
DateTime.Property month = dateTime4.monthOfYear();
System.out.println(month.isLeap());
System.out.println("==========================================");
}
}
常量类如下代码
/**
* 常量类
* */
public class Constants {
///
// 格式化时间 //
/
public static enum TimeFormat{
DATE("yyyy-MM-dd HH:mm:ss"),
DATE_WEEK("yyyy年MM月dd日 HH:mm:ss EE"),
WEEK("E"),//星期几
WEEK_CHAR("e"),//周几 1-7
;
private final String fomat;
private TimeFormat(String format){
this.fomat = format;
}
public String getFomat() {
return fomat;
}
}
}