lsParseDateTime

Hi everyone,
I am having an issue lsParseDateTime.
Here is my code that is failing

startOfYesterday = lsDateTimeFormat(yesterday, "yyyy-mm-dd") & " 00:00:00";
startOfYesterday_UTC = lsParseDateTime(date=startOfYesterday, timezone='UTC');

And here is the error;

Message can’t cast [2022-05-15 00:00:00] to date value
Detail to add custom formats for en_AU, create/extend on of the following files [en-AU-datetime.df (for date time formats), en-AU-date.df (for date formats) or en-AU-time.df (for time formats)] in the following directory [/lucee/locales].

if I dump startOfYesterday I get;

startOfYesterday
string	2022-05-15 00:00:00

And isDate(startOfYesterday) - returns true.

I can’t see anything obvious… Thanks - as always!
Gavin.

Lucee : 5.3.8.206
OS: Amazon Linux 2
Tomcat: 9.0.59
Java : openjdk 11.0.13 2021-10-19 LTS

I’ve reproduced this. Setting locale to the English - (Australia). then call the lsParseDateTime() throws the error.
Can you please file a bug in Jira?: https://luceeserver.atlassian.net
TryCF.com

Yup - Done.
https://luceeserver.atlassian.net/browse/LDEV-3994

1 Like

Hi,
I have noticed that this has had some work done it - via the Jira ticket, thanks.

I have a question about Jira, now, please?
Is it anywhere in Jira (I couldn;t see it) that I can find the code changes made for this ticket?
Or is it a matter of just looking up a branch with the issue code?

Thanks!

mostly, the commit (code changes) done for the ticket is added in the comments of that ticket.
like [LDEV-3910] - Lucee

1 Like

Hi Everyone,

I am getting the following error - but what is weird about it is; in the ticket LDEV-3994, the workaround is to use “/” as a separator.
Which I have done - but it still fails… and with a message that I have never seen before - nor has google for that matter.

I have checked all of our servers (and my local/dev machine) and the only file in any /locale directory is pt-PT-date.df

Thanks for any help;
Gavin.

Message can’t cast [2022/05/30 00:00:00] to date value
Detail to add custom formats for en_AU, create/extend on of the following files [en-AU-datetime.df (for date time formats), en-AU-date.df (for date formats) or en-AU-time.df (for time formats)] in the following directory [/lucee/locales].
Stacktrace The Error Occurred in

/web/centra/dbsetup/scripts/customerBillingGC.cfm: line 83

81: // Now, tell them explicitly we want these to be UTC timestamps.
82: now_UTC = lsParseDateTime(date: today, timezone: ‘UTC’);
83: startOfYesterday_UTC = lsParseDateTime(date: startOfYesterday, timezone: ‘UTC’);|

Lucee : 5.3.8.206 AND 5.3.9.141
Tomcat: 9.0.59
Java: 11.0.13 RedHat
OS: 5.10.112-108.499.amzn2.x86_64

@Gavin_Baumanis The correct solution for this, we need to follow the instructions from the error details

Please create a file en-AU-datetime.df in web-context/lucee/locales with below content (ex- C:\lucee\tomcat\webapps\ROOT\WEB-INF\lucee\locales)

yyyy-MM-dd HH:mm:ss

And restart lucee/tomcat.

So now the lsParseDateTime() with locale en_AU supports date time string like 2022-05-15 00:00:00.

If you want to add more formats to be supported. Please append the format you want to support in a new line on that file like

yyyy/MM/dd HH:mm:ss
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
yyyy/MM/dd

So now these formats are supported by the lsParseDateTime() with en_AU.

Initially, I used lucee mask nn for Minute on en-AU-datetime.df file. So my checking is failed. Actually, the locale file needs java masks(mm for Minute) for that from here SimpleDateFormat (Java Platform SE 7 ).

Sorry for the previous incomplete workaround. Please use this solution and report here back.

1 Like

Turns out - I am a bit of an idiot…

I couldn’t work out - why this was even needed… (The addition of a new file to state what should work with lsParseDateTime()

Now - a few days after - it’s finally sunk in;
Apart from the genuine bug that was found : our code is shit. and I should never assume that it was written correctly in the first place / or working as one would should expect.

For some reason - (as it was written) we were trying to force an “en_AU” locale specific formatting upon a dateTime - only the format we were trying to use - is NOT a format normally used in Australia.

So - the addition of the “df” file noted in the error is required to allow a non-standard format (for a specific locale) to be used in that locale - as if it was a standard / expected dateformat for the region.

Gavin.

2 Likes

@Gavin_Baumanis: I hit this too from some old CF10 code. I just changed to use eg

myDate = ParseDateTime("2022-07-30 12:43:04");

instead of the ls version. It does seem a strange assumption, though.

is NOT a format normally used in Australia

I would say that among web app developers it is universal no matter which locale one is in!

Perhaps this should be mentioned in the docs somewhere related to migrating to Lucee from ACF?

Thanks,
Murray

1 Like

Now that solution (creating .df files) details were added in docs: Custom Date and Time format for a Locale using .df files :: Lucee Documentation

LD-156 Add docs for custom date and time for a locale using .df files

I can understand the reason why,
But there COULD be an argument for adding “yyyy-mm-dd” to all locales…
BUT then - it wouldn’t be a “local” date definition.

Perhaps some better documentation is the answer for lsDate / lsDateTime functions - that they are JUST for local, locale specific formats ONLY.
If you are after anything else (internationally recognised format(s) - see the non-LS version.