0
Long startTime = 1112222220;
Date startDate  = DateTime.newInstance(Long.valueOf(startTime)).dateGmt();
system.debug('startDate: '+startDate);
String qry = 'Select Id, Subject from Task where ActivityDate > :startDate';
system.debug('qry: '+qry.replace(':startDate', ''+startDate));

The above prints the debug as:

startDate: 1973-07-11 00:00:00

qry: Select Id, Subject from Task where ActivityDate > 1973-07-11 00:00:00

It seems to contain the time portion and I do not get any Task records as part of my query. SO as I understand, I got a Date variable and I also extracted correct Date and assigned it. Then used it in a SOQL variable appropriately, but still something is not right, I might be ignoring something small, but impactful in my understanding, so need some guidance what might be wrong here in my understanding.

If I remove the time portion from startDate variable manually, my Query returns appropriate number of Task records.

4
  • Do you want to put just date in the query like 1973-07-11?? May 7, 2020 at 10:11
  • 1
    yes that is right. I actually expected date variable to NOT contain anything for a time portion at all, doesnt make sense to me, why it would do.
    – VarunC
    May 7, 2020 at 10:41
  • Actually the date always contains time but its fixed to 00:00:00. May 7, 2020 at 11:43
  • try this String strdate = DateTime.newInstance(startTime ).format('yyyy-MM-dd'); May 7, 2020 at 12:06

1 Answer 1

0

dateGmt() returns the Date component of a Datetime in the GMT time zone.

What you are looking for is format(). You need to format your date literal to a SOQL expected syntax.

https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_dateformats.htm

YYYY-MM-DDThh:mm:ss+hh:mm

YYYY-MM-DDThh:mm:ss-hh:mm

YYYY-MM-DDThh:mm:ssZ

2
  • That is right. I know but I am looking to understand why even after assigning to a DATE type variable and returning date only from function dateGmt() would still contain a Time portion. It does not make sense to me.
    – VarunC
    May 7, 2020 at 10:42
  • Date class in SF contains the time portion as well but it is always points to midnight since midnight is the start of the day. dateGMT, date and , Date.newInstance from the structure perspective are the same. DateTime myDateTime = DateTime.newInstance(2006, 3, 16, 23, 0, 0); Date myDate = myDateTime.dateGMT(); Date expected = Date.newInstance(2006, 3, 17); System.debug('Dates'+myDate+'=='+expected); System.assertEquals(expected, myDate);
    – Mert YALTI
    May 7, 2020 at 13:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .