一、Locale类
1、Locale对象表示了特定的地理、政治和文化地区,是一种标识所要获取的对象种类 (NumberFormat) 的机制。但 locale 只是一种标识对象的机制,不是对象本身的容器。
1、Locale对象表示了特定的地理、政治和文化地区,是一种标识所要获取的对象种类 (NumberFormat) 的机制。但 locale 只是一种标识对象的机制,不是对象本身的容器。
例
import java.util.Locale; public class Test4 { public static void main(String args[]) { Locale []locale = Locale.getAvailableLocales();//返回所有已安装语言环境的数组。 for(int i = 0; i<locale.length; i++){ System.out.println(locale[i]); } Locale locale1 = Locale.getDefault();//获取默认的语言环境 System.out.println(Locale.getDefault().getDisplayName());//打印出默认的语言环境名 System.out.println(locale1.getISO3Country());//打印ISO国家/地区三字母缩写 Locale.setDefault(Locale.CANADA_FRENCH);//设置默认的语言环境,Locale类提供了很多静态的语言或国家/地区字段 System.out.println(Locale.getDefault()); System.out.println(Locale.getDefault().getVariant());//返回此语言环境的变量代码。 } }
二、java.sql.Date类
例
import java.sql.Date; public class Test4 { public static void main(String args[]) { Date date = new Date(1000);//java.sql.Date类通常用在处理数据库的时间上 System.out.println(date); java.util.Date date1 = new java.util.Date(1000); System.out.println(date1); String a = "2018-05-21"; Date date2 = Date.valueOf(a);//java.sql.Date类提供了静态的valueOf(String s)方法处理yyyy-mm-dd格式的字符串,转换成Date值 System.out.println(date2); } }
三、Calendar类
例
import java.util.Calendar; import java.util.GregorianCalendar; public class Test4 { public static void main(String args[]) { Calendar calendar = Calendar.getInstance(); calendar.set(2016,0,23,14,55,40);//设置日历的时间 System.out.println(calendar);//直接打印WEEK_OF_MONTH为4 calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置一周的第一天为星期一,默认第一天为周日 calendar.setMinimalDaysInFirstWeek(7);//设置一周必须是7天,默认如果每年第一个月的第一周包含这个月的第一天则值为1 System.out.println(calendar); //打印发现WEEK_OF_MONTH为3,setFirstDayOfWeek和setMinimalDaysInFirstWeek方法只对WEEK_OF_MONTH/DAY_OF_WEEK_IN_MONTH两个字段起作用 /*常用方法① set(int field ,int value) set(int year ,int month ,int date) set(int year ,int month ,int date ,int hourOfDay ,int minute) set(int year ,int month ,int date ,int hourOfDay ,int minute ,int second) roll(int field ,int amount) 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。 */ Calendar calendar1 = Calendar.getInstance(); calendar1.set(Calendar.MONTH, Calendar.JUNE);//把日历时间的月份修改为6月 calendar1.set(2019,5,10);//将日历时间修改为2019年6月10日 calendar1.roll(Calendar.MONTH,6);//当前月份是6月,如果amount为7时,则月份为1月份,年份不会有变化 System.out.println(calendar1.getTime()); Calendar calendar2 = GregorianCalendar.getInstance(); System.out.println(calendar2.getTime()); /*宽松性 Calendar 有两种解释日历字段的模式,即 lenient 和 non-lenient。当 Calendar 处于 lenient 模式时, 它可接受比它所生成的日历字段范围更大范围内的值。当 Calendar 重新计算日历字段值,以便由 get() 返回这些值时, 所有日历字段都被标准化。例如,lenient 模式下的 GregorianCalendar 将 MONTH == JANUARY、DAY_OF_MONTH == 32 解释为 February 1。 当 Calendar 处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。 例如实例中的calendar2就处于lenient模式下 这里可以看出roll和add两个方法的区别了,假设现在的时间是2018年5月23日,使用add 方法给MONTH字段增加8个月,则日历时间为2019年1月23,使用roll方法,则日历时间为2018年1月23日 */ calendar2.add(GregorianCalendar.MONTH,10); System.out.println(calendar2.getTime()); GregorianCalendar gregorianCalendar = new GregorianCalendar(); System.out.println(gregorianCalendar.get(GregorianCalendar.YEAR));//获取gregorianCalendar日历的年份 System.out.println(gregorianCalendar.isLeapYear(gregorianCalendar.get(GregorianCalendar.YEAR)));//判断该年份是否是闰年 } }
四、java.text.DateFormat
例
import java.text.*; import java.util.*; import java.lang.StringBuffer; import java.util.GregorianCalendar; import java.util.Calendar; public class Test10 { public static void main(String args[]){ /* 计算两个日期的时间差实例 Calendar calendar = Calendar.getInstance(); calendar.set(2018,4,3,12,3,12); long a = calendar.getTimeInMillis(); calendar.set(2015,2,4,9,23,12); long b = calendar.getTimeInMillis(); long c = a - b; int sec = (int)(c/1000%60); int min = (int)(c/1000/60%60); int hour = (int)(c/1000/60/60%24); int day = (int)(c/1000/60/60/24); System.out.println("相差"+day+"日"+hour+"时"+min+"分"+sec+"秒"); */ /* static DateFormat getDateInstance() static DateFormat getDateInstance(int style) static DateFormat getDateInstance(int style, Locale alocale) static DateFormat getDateTimeInstance() static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale alocale) static DateFormat getTimeInstance() static DateFormat getTimeInstance(int style) static DateFormat getTimeInstance(int style, Locale alocale) 示例 DateFormat dateFormat = DateFormat.getDateInstance(); System.out.println(dateFormat.format(new Date())); DateFormat dateFormat1 = DateFormat.getDateInstance(DateFormat.SHORT); System.out.println(dateFormat1.format(new Date())); DateFormat dateFormat2 = DateFormat.getDateInstance(DateFormat.FULL,Locale.US); System.out.println(dateFormat2.format(new Date())); DateFormat dateFormat3 = DateFormat.getDateTimeInstance(); System.out.println(dateFormat3.format(new Date())); DateFormat dateFormat4 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT); System.out.println(dateFormat4.format(new Date())); */ DateFormat dateFormat5 = DateFormat.getDateTimeInstance(); SimpleDateFormat simpleDateFormat = (SimpleDateFormat)dateFormat5; System.out.println(simpleDateFormat.toPattern());//输出默认的解析文本格式 //new ParsePosition(2)表示从字符串第2位开始解析日期,索引从0开始 Date date = dateFormat5.parse("112005-4-4 16:22:09",new ParsePosition(2)); try { Date date2 = dateFormat5.parse("2004-4-4 12:00:01"); System.out.println(date2); } catch (ParseException e){ e.printStackTrace(); } System.out.println(date); //使用pattern模式,locale.UK环境构造SimpleDateFormat对象 SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("hh/mm/ss MM/dd/yyyy",Locale.CHINESE); System.out.println(simpleDateFormat1.toPattern()); System.out.println(simpleDateFormat1.format(new Date()));//格式化为指定模式的日期 Date date1 = simpleDateFormat1.parse("12/03/22 12/3/2003",new ParsePosition(0));//解析字符串 System.out.println(simpleDateFormat1.format(date1));//格式化解析的日期 //DateFormatSymbols类提供了获取指定语言环境的DateFormatSymbols实例,并提供诸多方法,可以对该实例的属性进行修改,如中文环境星期一,UK环境则为MONDAY DateFormatSymbols symbols = DateFormatSymbols.getInstance(Locale.CHINESE); System.out.println(Locale.getDefault());//默认语言环境是SIMPLIFIED_CHINESE,它与CHINESE的日期时间模式字母表示不一致 String str = symbols.getLocalPatternChars();//打印出默认语言环境SIMPLIFIED_CHINESE日期时间模式表示字母 /* SimpleDateFormat(String pattern, Locale locale) SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) SimpleDateFormat(String pattern) applyPattern(String pattern) StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。 FieldPosition(Format.Field attribute) FieldPosition(Format.Field attribute, int fieldID) FieldPosition(int field) */ SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd hh/mm/ss"); Date date2 = new Date(); FieldPosition fieldPosition1 = new FieldPosition(DateFormat.YEAR_FIELD); StringBuffer stringBuffer = new StringBuffer("2013"); //FieldPosition对象是为了追踪DateFormat.YEAR_FIELD的位置 stringBuffer = simpleDateFormat2.format(new Date(),stringBuffer,fieldPosition1); System.out.println(stringBuffer); //stringBuffer的值为20132018/05/25 02/39/58,所以YEAR_FIELD的位置为4-8 System.out.println(fieldPosition1.getBeginIndex()+" "+fieldPosition1.getEndIndex()); } }
本文介绍了Java中日期时间处理的关键类,包括Locale类用于处理地区文化相关的数据格式化问题,java.sql.Date类用于处理数据库时间,Calendar类用于进行复杂的日期时间运算,以及DateFormat类用于日期时间的格式化和解析。

被折叠的 条评论
为什么被折叠?



