让jvm在泰国按公历处理日期.doc_第1页
让jvm在泰国按公历处理日期.doc_第2页
让jvm在泰国按公历处理日期.doc_第3页
让jvm在泰国按公历处理日期.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

泰国历与公历差异的处理问题:在jvm泰国本地环境下对2012-02-29进行格式化,结果显示为2012-03-01。分析:发现jvm泰国本地环境下拥有泰国当地的历法,此历法和公历不同。jvm在泰国按泰国历支持,而2012-02-29作为泰历,对应公历1469年,而公历1469年不是闰年,所以展示为泰历2012-03-01(公历1469-03-01)。目的:为了使泰国jvm按公历处理日期,修改方式有2种1, 从jvm底层修改api接口的那些class文件,反编译,修改,重新打jar包,替换到jvm路径下。2, 程序主动修改,规避自动按泰国历适应的情况。主要测试代码如下:import java.io.UnsupportedEncodingException;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;import java.util.regex.Matcher;import java.util.regex.Pattern;/java -Duser.timezone=PRC -Duser.language=th -Duser.region=TH -jar TestDate.jar yyyy-MM-dd 2012-02-29public class TestDate private static int daysInMonth = 31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31 ;public static void main(String args) String tmp=u0E80;try byte ttt=tmp.getBytes(gb18030);for(int i=0;ittt.length;i+)System.out.println(Integer.toHexString(ttti); catch (UnsupportedEncodingException e2) / TODO Auto-generated catch blocke2.printStackTrace();if (args.length != 2) System.out.println(info1);return;String mode = args0;String date = args1;try SimpleDateFormat tmpformat = new SimpleDateFormat(mode); /$NON-NLS-1$SimpleDateFormat formatter = new SimpleDateFormat(yyyy-MM-dd); /$NON-NLS-1$/下面2行能解决泰国历公历问题/SimpleDateFormat tmpformat = new SimpleDateFormat(mode,new Locale(en,US); /$NON-NLS-1$/SimpleDateFormat formatter = new SimpleDateFormat(yyyy-MM-dd,new Locale(en,US); if (date.length() != 10) try formatter.parse(date); catch (ParseException e1) / TODO 自动生成 catch 块System.out.println(info2 + e1);/ 增加正则校验Pattern yyyyMMddDatePattern = Ppile(0-94)-(01-9|10-2)-(01-9|1-20-9|30-1);Matcher matcher = yyyyMMddDatePattern.matcher(date);if (!matcher.matches() System.out.println(info3);int year = Integer.parseInt(date.substring(0, 4);int month = Integer.parseInt(date.substring(5, 7);int day = Integer.parseInt(date.substring(8, 10);if (year 0) System.out.println(info4);/ 缩位输入年份,前面补齐20if (year = 99)year += 2000;if (month 12) System.out.println(info5);GregorianCalendar tmpCal = new GregorianCalendar(); /无泰历公历区分,只按公历处理tmpCal.set(Calendar.YEAR, year);int daysNum = daysInMonthmonth - 1;if (tmpCal.isLeapYear(year) & month = 2) System.out.println(info6 + daysNum);daysNum+;if (day daysNum) System.out.println(info7 + daysNum);System.out.println(info8 + daysNum);/Calendar cdate = Calendar.getInstance(new Locale(en,US); 不能解决问题Calendar cdate = formatter.getCalendar();cdate.setTime(formatter.parse(date);System.out.println(tmpformat.format(cdate.getTime();long l=formatter.parse(date).getTime();System.out.println(time +l);System.out.println(TimeZone.getDefault();System.out.println(Locale.getDefault();/Date

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论