【问题标题】:Get day name from full calender date format从完整的日历日期格式中获取日期名称
【发布时间】:2019-01-29 16:58:17
【问题描述】:

如何从这种日期格式“Wed Jan 30 00:00:00 GMT+02:00 2019”获取名称日名称,例如(星期三 - 星期四)

【问题讨论】:

标签: android calendar date-format


【解决方案1】:

java.time

看来你得到的是java.util.Date 类的一个实例。这是一个设计不佳且早已过时的类,因此首先要看看您是否可以避免这种情况,并使用现代 Java 日期和时间 API java.time 中的类的实例来代替。

但是,如果您从旧 API 获得 Date,而您现在无法更改或不想更改,则首先要将其转换为现代的 Instant,然后从那里执行进一步的转换。下面的 sn-p 使用 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 Backport,这是现代类的后向端口(JSR 310 的 ThreeTen;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

    【解决方案2】:

    您可以使用SimpleDateFormat 来表示全天名称的格式部分是EEEE。 希望对您有所帮助!

    【讨论】:

    【解决方案3】:

    您需要首先使用SimpleDateFormatString 解析为Calendar 对象:

    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);
    

    【讨论】:

    【解决方案4】:

    ## 在这里,我附上了一个可以给你预期输出的方法##

    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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2016-03-05
    • 2015-02-24
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多