当前位置: 首页 > 知识库问答 >
问题:

如何从同一实例获得另一个日历结果?

艾仲渊
2023-03-14
    public static ArrayList  listOfHolidays = new ArrayList();

        Holidays.holidaysList.add(new Holidays("Sukkot", "09/10/2014"));
        Holidays.holidaysList.add(new Holidays("Hanukkah", "17/12/2014"));
        Holidays.holidaysList.add(new Holidays("Purim", "16/03/2014"));

    Calendar calendar = Calendar.getInstance();

    @Override
    public String toString() {
    //DayOfWeek is just an enum of days (strings)
        return holidayName + " falls on "
                    + DayOfWeek.values()[Calendar.DAY_OF_WEEK - 1]; // Here i get the same day each time
    }

    @Override
        public int compareTo(Holidays another) {
            if(MainActivity.sortByName == true) {
                    return holidayName.compareToIgnoreCase(another.holidayName);
            }
            return convertStringToCal() - another.convertStringToCal();
        }

        private int convertStringToCal() {
            int year, month, day;
            day = Integer.valueOf(holidayDate.substring(0, 2));
            month = Integer.valueOf(holidayDate.substring(3, 5));
            year = Integer.valueOf(holidayDate.substring(6, 10));
            calendar = Calendar.getInstance();
            calendar.set(year, month, day);
            return (int) calendar.getTimeInMillis();
        }

Collections.sort()

共有1个答案

张卓
2023-03-14

我认为它可能行不通有多种原因。

首先,我不知道您是否省略了Holidays类的部分代码,但实际上从未将calendar对象设置在convertStringToCal()方法之外,但我不知道构造函数中是否也调用了这个方法。

其次也是最有可能是你的问题:

@Override
    public String toString() {
    //DayOfWeek is just an enum of days (strings)
        return holidayName + " falls on "
                                        // Here you are using the constant Calendar.DAY_OF_WEEK
                    + DayOfWeek.values()[Calendar.DAY_OF_WEEK - 1]; // Here i get the same day each time
    }

它实际上应该是这样的:

@Override
    public String toString() {
    //DayOfWeek is just an enum of days (strings)
        return holidayName + " falls on "
                    + DayOfWeek.values()[calendar.get(Calendar.DAY_OF_WEEK)]; // Now you won't get the same day every time. :)
    }

一些附加说明:

我将使用date对象保存日期,并使用simpledateformat将字符串转换为日期,反过来也可以。

public class Holidays {

        private final Calendar calendar = Calendar.getInstance();
        private final String holidayName;

        public Holidays(String holidayName, Date date) {
            this.holidayName = holidayName;
            this.calendar.setTime(date);
        }

        @Override
        public int compareTo(Holidays another) {
            // Generally you should avoid passing information statically between Activities
            if(MainActivity.sortByName == true) {
                    return holidayName.compareToIgnoreCase(another.holidayName);
            }
            return getTimeInMillis() - another.getTimeInMillis();
        }

        public long getTimeInMillis() {
            return this.calendar.getTimeInMillis();
        }

        @Override
        public String toString() {
        //DayOfWeek is just an enum of days (strings)
            DayOfWeek day = DayOfWeek.values()[calendar.get(Calendar.DAY_OF_WEEK)]; // Now you won't get the same day every time. :)
            return String.format("%s falls of %s", this.holidayName, day);
        }

    }
// Create date objects with calendar.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2014);
calendar.set(Calendar.MONTH, 3);
calendar.set(Calendar.DAY_OF_MONTH, 27);
Date date = calendar.getTime();

通过SimpleDateFormat,您可以转换StringDate对象,如下所示:

// The String pattern defines how date strings are parsed and formated
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

String dateString = "09/10/2014";

// Convert a String to Date
Date dateFromDateString = sdf.parse(dateString);

// Convert a Date to a String
String dateStringFromDate = sdf.format(dateFromDateString);

如果您需要的不仅仅是datestring对象的简单转换,那么您可以使用dateformat。这几乎是日期字符串转换的劳斯莱斯。它可以以一种更通用的方式解析和格式化字符串,而实际上不需要模式,并且它自动地考虑区域设置等等。

或者您可以使用JodaTime:)

 类似资料:
  • 问题内容: 当我从命令行调用存储的proc时,我得到以下信息。 这是我的Java代码的片段 当我执行该语句时,仅返回event_table结果。我阅读以下查询: 我试图避免对数据库发出多个请求,因为它非常慢(300毫秒,具体取决于多少结果) 可能吗? 问题答案: 我找到了这篇很棒的文章。http://www.herongyang.com/JDBC/MySQL-CallableStatement-M

  • 我需要创建三个类:客户、产品和订单。我希望我的orders类接受来自客户和产品的实例(即,能够让一个订单包含关于客户和他们正在订购的产品的信息)。在JavaScript中设置这一点的最佳方法是什么?我最初想让我的customer和products类扩展order类,但我是否能够让order同时扩展customer和products类?

  • 我想同步/更新不同的日历(iCal的奖励积分,但感谢它可能必须是Google Cal),用于一张Google工作表中的不同客户 从本页: https://docs.google.com/spreadsheets/d/1f6qUjGYHZtRRGCbyh5oNzM7o64B-wlkrTpB1ac64I2U/edit#gid=0 我希望C、D、E、F、G列中的信息输入到日历条目中,并根据a列中的日期与

  • 我有以下表格: 表名称 -----| 表字段 图书--------------------图书id、图书名称 作者 ---------- | author_id、author_name 图书作者-作者id,图书id 用户------------------用户id、用户名 注释----------注释id,注释 评论|用户|评论| id、用户id、图书id、日期 我需要显示书名,它的作者,以及为这

  • 问题内容: 假设我的表包含以下内容: 每次通过while循环。我想获取价格值的总和,但ID中的每个不同值仅获取一次 因此,以上述示例为例,我将得到类似以下内容的信息: 补充一下,我可能偶然发现了类似的帖子。问题是其他职位使用Oracle,另一方面我正在使用MySQL。 问题答案: 你需要和

  • 我有一个特点,它是由同一个结构以不同的方式实现的。为了实现这一点,我有不同的结构,它们有不同的实现。对于抽象,我将这些结构称为A-Z: 有没有其他方法来实现这一点,以便结构的每个实例都有一个不同的trait实现,或者创建一个新结构是最好的方法? 我不熟悉编译语言。我所做的大部分工作都是使用Python和TypeScript。