function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
dizzyemdizzyem 

Comparing two date lists

I am attempting to compare the dates from a job schedule to dates from it's child assignment schedules so I can determine which dates have not yet been assigned. So far I have a list of both jobdates and assignmentdates. My initial thought was to convert those to sets and do a minusSet to determine which dates are left. However, I am having trouble converting my date list to a set. I am getting an error that says:  Invalid initial value type LIST<Date__c> for SET<Date>

 

Here is my code for converting my job date list to a job date set:

 

 private List<Date__c> jobdates{ get {
        if(jobdates == null){
            jobdates = new list<Date__c>();
            jobdates = [select date__c, id from date__c where time_frame__c = :jobtimeframe];
        }
        return jobdates;
    } set;}
 
        private set<Date> setjobdates{ get {
        if(setjobdates == null){
            for(Date__c d : jobdates){
                setjobdates.add(d.date__c);
            }
        }
        return setjobdates;
    } set; }

 

Now, I am wondering if there is an easy fix to this or if there is another way to simply compare my two lists (jobdates and assignmentdates) without converting them to a set?

Best Answer chosen by Admin (Salesforce Developers) 
dizzyemdizzyem

Turns out I needed to format the dates. Here is the updated code in case it helps anyone in the future.

 

 private List<Date__c> jobdates{ get {
            if(jobdates == null){
                  jobdates = new list<Date__c>();
                  jobdates = [select date__c, id from date__c where time_frame__c = :jobtimeframe];
            }
            return jobdates;
      } set; }
     
      private set<String> setjobdates{ get {
            if(setjobdates == null){
                  for(Date__c d : jobdates){
                        //setjobdates.addAll(d.date__c);
                        setjobdates.add(datetime.newInstance(d.date__c.year(), d.date__c.month(), d.date__c.day()).format('MM/dd/yyyy'));
                  }
            }
            return setjobdates;
      } set; }
     

All Answers

sfdcfoxsfdcfox

You're trying to compare a Date__c to a Date, which are two different entities entirely. A Date__c is a custom object, that has fields like Id, Name, and Date__c, while Date is a standard object (formally System.Date), that has methods for manipulating calendar dates. You meant to use "setjobdates" and not "jobdates", which returns a type Set<Date>.

dizzyemdizzyem

Turns out I needed to format the dates. Here is the updated code in case it helps anyone in the future.

 

 private List<Date__c> jobdates{ get {
            if(jobdates == null){
                  jobdates = new list<Date__c>();
                  jobdates = [select date__c, id from date__c where time_frame__c = :jobtimeframe];
            }
            return jobdates;
      } set; }
     
      private set<String> setjobdates{ get {
            if(setjobdates == null){
                  for(Date__c d : jobdates){
                        //setjobdates.addAll(d.date__c);
                        setjobdates.add(datetime.newInstance(d.date__c.year(), d.date__c.month(), d.date__c.day()).format('MM/dd/yyyy'));
                  }
            }
            return setjobdates;
      } set; }
     

This was selected as the best answer