Still Can't Figured Out DateTimeFormat

Hi,

I’m still struggling with setting a custom date/time format in RT 4.2.

I’ve tried man different variants of the following to no avail:

Set(
$DateTimeFormat,
{
“Format” => “LocalizedDateTime”,
“DateFormat” => “MM/dd/yyyy”,
“TimeFormat” => “hh:mm a”
}
);

I read the documentation on this option at:

http://www.bestpractical.com/docs/rt/4.2/RT/Date.html#LocalizedDateTime

And based on that documentation, I feel like this ought to work, but
it does not. Specifically, the documentation reads:

LocalizedDateTime

Returns date and time as string, with user localization.

Supports arguments: DateFormat and TimeFormat which may contains date
and time format as specified in DateTime::Locale (default to
date_format_full and time_format_medium), AbbrDayand AbbrMonth which
may be set to 0 if you want full Day/Month names instead of
abbreviated ones.

However, when I set this option in my RT_SiteConfig.pm, the system
defaults back to the default date/time format.

I feel as though this ought to be an easy thing to change, and yet
none of the documentation describes how to do it. I have asked this
question before and never received a satisfactory answer. I recall
that at one point someone was suggesting I create a custom Perl module
and install it into RT for this purpose, but I’m having trouble
accepting that a simple change such as this requires custom coding
(however simple) rather than modifying a configuration option. You
don’t need a custom module to set the time zone, so why should you
need one to set the date/time format?

Is there really no simple configuration option that I can set to
format the date and time in an arbitrary way?

Tim Gustafson
tjg@ucsc.edu
831-459-5354
Baskin Engineering, Room 313A

I’m still struggling with setting a custom date/time format in RT 4.2.

You’ve forgotten to say what format you want, except obliquely in the
code below.

I’ve tried man different variants of the following to no avail:

Set(
$DateTimeFormat,
{
“Format” => “LocalizedDateTime”,
“DateFormat” => “MM/dd/yyyy”,
“TimeFormat” => “hh:mm a”
}
);

Returns date and time as string, with user localization.

I believe you’re misunderstanding ‘localization’ in this context.
The feature you’re using is intended to say “If a user’s RT Language
is set to french, attempt to use what DateTime::Locale knows about
french dates/times to format their date”. This is a highly technical
definition of ‘localization’, but is related to RT’s support for many
languages.

Supports arguments: DateFormat and TimeFormat which may contains date
and time format as specified in DateTime::Locale (default to
date_format_full and time_format_medium), AbbrDayand AbbrMonth which
may be set to 0 if you want full Day/Month names instead of
abbreviated ones.

The docs imply to read the DateTime::Locale docs

and to give it a Date formatting method and a Time formatting method
as understood by DateTime::Locale. DateTime::Locale will then use
what you input (such as time_format_medium) to calculate what the
user’s language indicates it should display. In particular,
time_format_medium for a swedish user may be different than
time_format_medium for a british user.

There is no arbitrary input of time format strings available through
this interface. Arbitrary format strings would defeat the purpose of
allowing a localized date and time display based on the user’s
language.

You could however construct an arbitrary date using DateTime::Locale’s
formatting method and passing it arbitrary format strings, but at that
point you’ve done a lot of work to reimplement POSIX::strftime

However, when I set this option in my RT_SiteConfig.pm, the system
defaults back to the default date/time format.

Actually, as an english speaker, with your configuration, I see

Sun, Mar 16, 2014 3:53:14 PM

which is quite different from

Sun Mar 16 15:53:14 2014

the RT system standard.

And if I was Swedish, I would see

sön 16 mar 2014 15.53.14

You’ll note that it knows to put the day before the month and to use
.s instead of :s

I feel as though this ought to be an easy thing to change, and yet
none of the documentation describes how to do it. I have asked this
question before and never received a satisfactory answer.

You didn’t reply to my previous answer explaining or asking for
clarification.

You don’t need a custom module to set the time zone, so why should you
need one to set the date/time format?

I believe you misunderstand the complexity of date output formats.
Timezones are actually easier in many ways.

Is there really no simple configuration option that I can set to
format the date and time in an arbitrary way?

Arbitrary? Write the 4 lines of code I showed you when you asked this
question originally. Or, as I replied to your previous email, instead of
attempting to use LocalizedDateTime, pick the RT built-in which is
already close to your time format and see if you can pass arguments
(things such as the default RT format allow you to pass Seconds => 0
for example). Or read the DateTime::Locale docs and hope there’s a
format close enough to the one you need, however a quick perusal of
their code makes that doubtful.

Faced with a date format as specific as yours and far from any built
in RT formats, I would look to see if your format has an RFC name, see
if there is a perl module to do the heavy lifting and then write the
trivial piece of code. It would probably have taken less time than
you’ve spent wrestling with LocalizedDateTime at this point.

-kevin