8

I'm trying to get a DateTime to format into a value to be used in a dynamic query. For some reason, the documentation snippet on how to format a DateTime for a query is giving me an exception.

Im trying to run this anonymous apex snippet:

System.debug(DateTime.now().format('YYYY-MM-DDThh:mm:ssZ'));

The format string I'm using is specified on Date Formats and Date Literals.

The exception I'm getting back is:

Line: 1, Column: 1 System.StringException: Unrecognized format: YYYY-MM-DDThh:mm:ssZ

If I remove the T, the string is accepted, but isn't in the right format to query on.

System.debug(DateTime.now().format('YYYY-MM-DD hh:mm:ssZ'));

Output:

2016-03-75 04:01:33-0400

Additionally, if I take the date literals provided on the page, and use them in a query, the query accepts the string, but still won't let me try to format a DateTime into the same Date Format as the accepted Date Literal.

Example:

[SELECT Id FROM Account WHERE Some_Date__c > 1999-01-01T23:01:01Z]
2
  • 1
    Why are you formatting DateTime values instead of just binding directly to the variable?
    – sfdcfox
    Mar 15, 2016 at 21:12
  • The formatted date string is being used later on in a partner api query operation, so I can't use a bind variable inside the query string. Mar 16, 2016 at 14:42

2 Answers 2

10

Attribution

Use:

system.debug(Datetime.now().formatGMT('yyyy-MM-dd\'T\'HH:mm:ss.SSS\'Z\''));

The esteemed Mr Ballinger also recommends the following, but it is wrapped in double quotes and slower, so I would probably not use it, myself.

system.debug(JSON.serialize(Datetime.now()));
5

You are linking into formats used in SOQL engine. Please refer to Apex reference and Java SimpleDateFormat for more advanced formats.

You must log in to answer this question.

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