lc_time_fmt (public)

 lc_time_fmt datetime fmt [ locale ]

Defined in packages/acs-lang/tcl/localization-procs.tcl

Formats a time for the specified locale.

Parameters:
datetime - A time string in one of the following formats as from clock tcl command specifications: "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M" and "%Y-%m-%d". Database timestamps such as "2019-12-16 12:50:14.049896+01" are also tolerated, by normalizing them to "2019-12-16 12:50:14". Note that in this case all information about timezone and fractions of second will be discarded.
fmt - An ISO 14652 LC_TIME style formatting string. The highlighted functions localize automatically based on the user's locale; other strings will use locale-specific text but not necessarily locale-specific formatting.
      %a           FDCC-set's abbreviated weekday name.
      %A           FDCC-set's full weekday name.
      %b           FDCC-set's abbreviated month name.
      %B           FDCC-set's full month name.
      %c           FDCC-set's appropriate date and time
                   representation.
      %C           Century (a year divided by 100 and truncated to
                   integer) as decimal number (00-99).
      %d           Day of the month as a decimal number (01-31).
      %D           Date in the format mm/dd/yy.
      %e           Day of the month as a decimal number (1-31 in at
                   two-digit field with leading  fill).
      %E           Month number as a decimal number (1-12 in at
                   two-digit field with leading  fill).
      %f           Weekday as a decimal number (1(Monday)-7).
      %F           is replaced by the date in the format YYYY-MM-DD
                   (ISO 8601 format)
      %h           A synonym for %b.
      %H           Hour (24-hour clock) as a decimal number (00-23).
      %I           Hour (12-hour clock) as a decimal number (01-12).
      %j           Day of the year as a decimal number (001-366).
      %m           Month as a decimal number (01-13).
      %M           Minute as a decimal number (00-59).
      %n           A  character.
      %p           FDCC-set's equivalent of either AM or PM.
      %r           Hours and minutes using 12-hour clock AM/PM
                   notation, e.g. '06:12 AM'.
      %q           Long date without weekday (OpenACS addition to the standard)
      %Q           Long date with weekday (OpenACS addition to the standard)
      %S           Seconds as a decimal number (00-61).
      %t           A  character.
      %T           24-hour clock time in the format HH:MM:SS.
      %u           Week number of the year as a decimal number with
                   two digits and leading zero, according to "week"
                   keyword.
      %U           Week number of the year (Sunday as the first day of
                   the week) as a decimal number (00-53).
      %w           Weekday as a decimal number (0(Sunday)-6).
      %W           Week number of the year (Monday as the first day of
                   the week) as a decimal number (00-53).
      %x           FDCC-set's appropriate date representation.
      %X           FDCC-set's appropriate time representation.
      %y           Year (offset from %C) as a decimal number (00-99).
      %Y           Year with century as a decimal number.
      %Z           The connection's timezone, e.g. 'America/New_York'.
      %%           A  character.
    

locale (optional) - Locale identifier must be in the locale database
Returns:
A date formatted for a locale
Error:
Fails if given a non-existent locale or a malformed datetime. Impossible dates will be treated as per clock scan behavior and e.g. 29 Feb 1999 will be translated to 1st March, Monday, as it wasn't a leap year. The clock api takes care of the proper handling of Julian/Gregorian dates.
See Also:

Partial Call Graph (max 5 caller/called nodes):
%3 test_lang_test__lc_procs lang_test__lc_procs (test acs-lang) lc_time_fmt lc_time_fmt test_lang_test__lc_procs->lc_time_fmt test_lc_time_fmt_Z_timezone lc_time_fmt_Z_timezone (test acs-lang) test_lc_time_fmt_Z_timezone->lc_time_fmt ad_conn ad_conn (public) lc_time_fmt->ad_conn lc_time_fmt_compile lc_time_fmt_compile (private) lc_time_fmt->lc_time_fmt_compile util::trim_leading_zeros util::trim_leading_zeros (public) lc_time_fmt->util::trim_leading_zeros Class ::xowf::test_item::Answer_manager Class ::xowf::test_item::Answer_manager (public) Class ::xowf::test_item::Answer_manager->lc_time_fmt Class ::xowiki::includelet::creation-date Class ::xowiki::includelet::creation-date (public) Class ::xowiki::includelet::creation-date->lc_time_fmt apm_build_repository apm_build_repository (private) apm_build_repository->lc_time_fmt calendar::item::get calendar::item::get (public) calendar::item::get->lc_time_fmt callback::search::action::impl::syndicate callback::search::action::impl::syndicate (private) callback::search::action::impl::syndicate->lc_time_fmt

Testcases:
lang_test__lc_procs, lc_time_fmt_Z_timezone
Source code:
    if { $datetime eq "" } {
        return ""
    }

    if { $locale eq "" } {
        set locale [ad_conn locale]
    }

    set datetime [string range [string trim $datetime] 0 18]
    foreach format {
        "%Y-%m-%d %H:%M:%S"
        "%Y-%m-%d %H:%M"
        "%Y-%m-%d"
    } {
        set invalid_format_p [catch {
            set date_clock [clock scan $datetime -format $format]
        }]
        if {!$invalid_format_p} {
            break
        }
    }
    if {$invalid_format_p} {
        error "Invalid date: $datetime"
    }

    set date_tokens [list]
    foreach token [clock format $date_clock -format "%Y %m %d %H %M %S %w"] {
        lappend date_tokens [util::trim_leading_zeros $token]
    }

    lassign $date_tokens  lc_time_year  lc_time_month  lc_time_days  lc_time_hours  lc_time_minutes  lc_time_seconds  lc_time_day_no

    #
    # Keep the results of lc_time_fmt_compile in the per-thread cache
    # (namespaced variable)
    #
    return [subst [acs::per_thread_cache eval -key acs-lang.lc_time_fmt_compile($fmt,$locale) {
        lc_time_fmt_compile $fmt $locale
    }]]
XQL Not present:
PostgreSQL, Oracle
Generic XQL file:
packages/acs-lang/tcl/localization-procs.xql

[ hide source ] | [ make this the default ]
Show another procedure: