我对Java不熟悉,通常使用PHP。
我正在尝试转换这个字符串:
格林威治标准时间2011年3月14日星期三16:02:37
放入一个日历对象,这样我就可以像这样轻松地拖动年和月:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
手动解析它是不是一个坏主意?使用子字符串方法?
任何建议都会有帮助,谢谢!
我对Java不熟悉,通常使用PHP。
我正在尝试转换这个字符串:
格林威治标准时间2011年3月14日星期三16:02:37
放入一个日历对象,这样我就可以像这样轻松地拖动年和月:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
手动解析它是不是一个坏主意?使用子字符串方法?
任何建议都会有帮助,谢谢!
当前回答
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
注意:根据您的环境/要求设置Locale
另请参阅
Javadoc
其他回答
嗯,我认为复制SimpleDateFormat等类中已经存在的代码是一个坏主意。
另一方面,我个人建议,如果可以的话,完全避免使用Calendar和Date,而使用Joda Time,这是一个设计得更好的日期和时间API。例如,您需要知道SimpleDateFormat不是线程安全的,因此每次使用它时,您要么需要线程局部变量、同步,要么需要一个新实例。Joda解析器和格式化器是线程安全的。
用时区解析时间,模式中的Z为时区
String aTime = "2017-10-25T11:39:00+09:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(aTime));
Log.i(TAG, "time = " + cal.getTimeInMillis());
} catch (ParseException e) {
e.printStackTrace();
}
输出:它将返回UTC时间
1508899140000
如果我们不像yyyy-MM-dd 't 'HH:mm:ss那样设置时区。SimpleDateFormat将使用在Setting中设置的时区
SimpleDateFormat是伟大的,只是注意HH是不同于HH时,与小时。HH返回基于24小时的小时数,HH返回基于12小时的小时数。
例如,下面将返回12小时的时间:
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
虽然这将返回24小时时间:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
不需要创建新的日历,SimpleDateFormat已经在下面使用了一个日历。
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US);
Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
Calendar cal = sdf.getCalendar();
(我还不能评论,这就是为什么我创建了一个新的答案)
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
注意:根据您的环境/要求设置Locale
另请参阅
Javadoc