196

我是 Java 新手,通常使用 PHP。

我正在尝试转换此字符串:

2011 年 3 月 14 日星期一 16:02:37 GMT

进入日历对象,这样我就可以像这样轻松地拉出年份和月份:

String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);

手动解析它会是一个坏主意吗?使用子字符串方法?

任何建议都会有所帮助,谢谢!

4

8 回答 8

444
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根据您的环境/要求设置


也可以看看

于 2011-03-14T16:16:51.680 回答
24
于 2016-11-01T22:44:50.830 回答
14

好吧,我认为复制已经存在于SimpleDateFormat.

另一方面,我个人建议尽可能避免CalendarDate完全使用Joda Time,作为设计更好的日期和时间 API。例如,您需要注意它SimpleDateFormat不是线程安全的,因此每次使用它时都需要线程本地、同步或新实例。Joda 解析器和格式化程序线程安全的。

于 2011-03-14T16:11:31.523 回答
10

不需要创建新的日历,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();

(我还不能发表评论,这就是我创建一个新答案的原因)

于 2015-11-18T08:49:38.143 回答
6

SimpleDateFormat很棒,请注意这HHhh工作时间不同。HH将返回基于 24 小时的小时数,而 hh 将返回基于 12 小时的小时数。

例如,以下将返回 12 小时时间:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");

虽然这将返回 24 小时时间:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
于 2013-06-25T05:29:57.557 回答
5

用时区解析时间,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

于 2017-10-25T04:18:47.707 回答
3

是的,自己解析它是不好的做法。看一下SimpleDateFormat,它会将 String 转换为 Date ,您可以将 Date 设置为 Calendar 实例。

于 2011-03-14T16:12:22.660 回答
1

简单方法:

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;
}
于 2016-11-01T19:53:45.793 回答