package org.springside.examples.showcase.time; import java.util.Locale; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.springframework.util.Assert; public class JodaDemo { public static void main(String[] args) { testTimeZone(); testLocale(); testGetAge(); } public static void testTimeZone() { System.out.println("演示时区"); String format = "yyyy-MM-dd HH:mm:ss zZZ"; //DateTime的毫秒即System的毫秒,即1970到现在的UTC的毫秒数. System.out.println(new DateTime().getMillis() + " " + System.currentTimeMillis()); //将日期按默认时区打印 DateTime fooDate = new DateTime(1978, 6, 1, 12, 10, 8, 0); System.out.println(fooDate.toString(format) + " " + fooDate.getMillis()); //"1978-06-01 12:10:08" //将日期按UTC时区打印 DateTime zoneWithUTC = fooDate.withZone(DateTimeZone.UTC); System.out.println(zoneWithUTC.toString(format) + " " + zoneWithUTC.getMillis());//"1978-06-01 04:10:08", sameMills //按不同的时区分析字符串,得到不同的时间 String dateString = "1978-06-01 12:10:08"; DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); DateTime parserResult1 = fmt.withZone(DateTimeZone.forID("US/Pacific")).parseDateTime(dateString); DateTime parserResult2 = fmt.withZone(DateTimeZone.UTC).parseDateTime(dateString); System.out.println(parserResult1.toString(format) + " " + parserResult1.getMillis()); System.out.println(parserResult2.toString(format) + " " + parserResult2.getMillis()); } public static void testLocale() { System.out.println("演示Locale"); DateTime dateTime = new DateTime().withZone(DateTimeZone.UTC); //打印中文与英文下不同长度的日期格式串 System.out.println("S: " + DateUtils.formatDateTime(dateTime, "SS", "zh")); System.out.println("M: " + DateUtils.formatDateTime(dateTime, "MM", "zh")); System.out.println("L: " + DateUtils.formatDateTime(dateTime, "LL", "zh")); System.out.println("XL: " + DateUtils.formatDateTime(dateTime, "FF", "zh")); System.out.println(""); System.out.println("S: " + DateUtils.formatDateTime(dateTime, "SS", "en")); System.out.println("M: " + DateUtils.formatDateTime(dateTime, "MM", "en")); System.out.println("L: " + DateUtils.formatDateTime(dateTime, "LL", "en")); System.out.println("XL: " + DateUtils.formatDateTime(dateTime, "FF", "en")); System.out.println(""); System.out.println(""); //直接打印TimeStamp, 日期是M,时间是L DateTimeFormatter formatter = DateTimeFormat.forStyle("ML").withLocale(new Locale("zh")).withZone( DateTimeZone.UTC); System.out.println("ML Mix: " + formatter.print(dateTime.getMillis())); //只打印日期不打印时间 System.out.println("Date only :" + DateUtils.formatDateTime(dateTime, "M-", "zh")); } public static void testGetAge() { DateTime now = new DateTime(); DateTime oneYearsAgo = now.minusYears(2).plusDays(20); DateTime twoYearsAgo = now.minusYears(2); Assert.isTrue(1 == DateUtils.getAge(oneYearsAgo)); Assert.isTrue(2 == DateUtils.getAge(twoYearsAgo)); } }