我是 Java 新手,通常使用 PHP。
我正在尝试转换此字符串:
2011 年 3 月 14 日星期一 16:02:37 GMT
进入日历对象,这样我就可以像这样轻松地拉出年份和月份:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
手动解析它会是一个坏主意吗?使用子字符串方法?
任何建议都会有所帮助,谢谢!
我是 Java 新手,通常使用 PHP。
我正在尝试转换此字符串:
2011 年 3 月 14 日星期一 16:02:37 GMT
进入日历对象,这样我就可以像这样轻松地拉出年份和月份:
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
根据您的环境/要求设置
也可以看看
好吧,我认为复制已经存在于SimpleDateFormat
.
另一方面,我个人建议尽可能避免Calendar
并Date
完全使用Joda Time,作为设计更好的日期和时间 API。例如,您需要注意它SimpleDateFormat
不是线程安全的,因此每次使用它时都需要线程本地、同步或新实例。Joda 解析器和格式化程序是线程安全的。
不需要创建新的日历,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();
(我还不能发表评论,这就是我创建一个新答案的原因)
SimpleDateFormat
很棒,请注意这HH
与hh
工作时间不同。HH
将返回基于 24 小时的小时数,而 hh 将返回基于 12 小时的小时数。
例如,以下将返回 12 小时时间:
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
虽然这将返回 24 小时时间:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
用时区解析时间,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,它会将 String 转换为 Date ,您可以将 Date 设置为 Calendar 实例。
简单方法:
public Calendar stringToCalendar(String date, String pattern) throws ParseException {
String DEFAULT_LOCALE_NAME = "pt";
String DEFAULT_COUNTRY = "BR";
Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY);
SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE);
Date d = format.parse(date);
Calendar c = getCalendar();
c.setTime(d);
return c;
}