从完整的日历日期格式获取日期名称

时间:2019-01-29 16:58:18

标签: android calendar date-format

如何从该日期格式“星期三1月30日00:00:00 GMT + 02:00 2019”中获取命名日期名称(如(星期三-星期四)

4 个答案:

答案 0 :(得分:1)

java.time

您似乎拥有的是java.util.Date类的一个实例。那是一个设计欠佳的类,已经过时了,所以第一件事就是看看您是否可以避免这种情况,而是从现代的Java日期和时间API java.time中获取一个类的实例。

但是,如果您是从旧版API中获得Date的,而您现在无法更改或不想更改它,那么第一件事就是将其转换为现代Instant,然后进一步执行从那里转换。以下代码段使用ThreeTenABP,更多内容在下面。

    Date yourOldfashionedDate = getFromLegacyApi();

    Instant modernInstant = DateTimeUtils.toInstant(yourOldfashionedDate);
    String dayName = modernInstant.atZone(ZoneId.systemDefault())
            .getDayOfWeek()
            .getDisplayName(TextStyle.FULL, Locale.ENGLISH);

    System.out.println("Day name is " + dayName);

根据问题的日期给出输出:

  

日期名称为星期三

如果您得到的是String(可能是从Date.toString返回的字符串),则需要先对其进行解析:

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);

    String dateString = "Wed Jan 30 00:00:00 GMT+02:00 2019";
    ZonedDateTime dateTime = ZonedDateTime.parse(dateString, dateFormatter);
    String dayName = dateTime.getDayOfWeek()
            .getDisplayName(TextStyle.FULL, Locale.ENGLISH);

您看到最后一点与以前完全一样。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(来自API级别26)中,内置了现代API。仅在这种情况下,请使用yourOldfashionedDate.toInstant()而不是DateTimeUtils.toInstant(yourOldfashionedDate)
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 1 :(得分:0)

您可以使用SimpleDateFormat,全日名称的格式部分为EEEE。 希望对您有帮助!

答案 2 :(得分:0)

您首先需要使用StringCalendar解析为SimpleDateFormat对象:

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
try {
    cal.setTime(sdf.parse("Wed Jan 30 00:00:00 GMT+02:00 2019"));
} catch (ParseException e) {
    // Log invalid date format
}

然后从您的Calendar对象中提取日期:

String day = cal.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG,Locale.ENGLISH);

答案 3 :(得分:0)

##在这里,我附加了一个方法,该方法将为您提供预期的输出##

public void dayName(){
    String weekDay,time;
    SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE MMM dd HH:mm", Locale.US);
    SimpleDateFormat dayFormat1 = new SimpleDateFormat("hh:mm yyyy", Locale.US);
    dayFormat.setTimeZone(TimeZone.getTimeZone("ITC"));
    dayFormat1.setTimeZone(TimeZone.getTimeZone("GMT"));
        Calendar calendar = Calendar.getInstance();
        weekDay = dayFormat.format(calendar.getTime());
        time=dayFormat1.format(calendar.getTime());
        Log.e(TAG, "dayName: "+weekDay+" GMT+"+time );// out put looks like : Tuesday Jan 29 17:58 GMT+05:58 2019

}
  • 我使用了两个时区,分别是ITC和GMT