最近做了一些文本解析的工作,但是被java给恶心到了。java时间处理非常混乱,制造了不少不必要的麻烦。所以特别记录下来,以免以后再遇到同样的问题。
首先就是月份的解析。在日期和年份都和正常理解完全一样的情况下,不知道java的开发人员怎么想的,突然来了个不一样的月份解析。java的月份是从0-11的,也就是说你得到的月份其实是要减一才能得到正确的月份。代码如下:
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.MONDAY, Integer.parseInt(month- 1);
然后我就用Calendar自带的解析吧,也遇到不顺利的事情。遇到带有PM这样的就无法解析了,找了半天才发现原来需要加上地区信息,其实就是解析语言含义,比如用“下午”就用“Locale.CHINA”。下面给一个简单的测试用例:
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.Locale;
- public class TimeParseTest {
- private static final String time = "12:08PM GMT+08:00 1/11";
- private final static SimpleDateFormat sdf = new SimpleDateFormat("K:mma z MM/dd", Locale.US);
- public static void main(String[] args) {
- try {
- Calendar calendar = new GregorianCalendar();
- // 解析时间文本
- calendar.setTime(sdf.parse(time));
- // 设置年份为当前年份
- calendar.set(Calendar.YEAR, Calendar.getInstance().get(Calendar.YEAR));
- System.out.println(calendar.getTime());
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
- }
本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/425919,如需转载请自行联系原作者