Changeset 465ac5e in mainline for uspace/app/date/date.c


Ignore:
Timestamp:
2025-04-12T15:49:45Z (3 days ago)
Author:
Wayne Thornton <wmthornton-dev@…>
Children:
1cea9c0
Parents:
b8b031f
Message:

Added international date format support

MM:DD:YYYY is now supported alongside current DD:MM:YYYY format.
Updated 'date' and 'date_cfg' to support changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/date/date.c

    rb8b031f r465ac5e  
    11/*
     2 * Copyright (c) 2025 Wayne Michael Thornton (WMT) <wmthornton-dev@outlook.com>
    23 * Copyright (c) 2012 Maurizio Lombardi
    34 * All rights reserved.
     
    195196
    196197/** Read the day, month and year from a string
    197  *  with the following format: DD/MM/YYYY
     198 *  with the following format: DD/MM/YYYY or MM/DD/YYYY
    198199 */
    199200static errno_t
     
    202203        errno_t rc;
    203204        uint32_t tmp;
     205        uint32_t first_num;
     206        uint32_t second_num;
    204207
    205208        if (str_size(wdate) != 10) /* str_size("DD/MM/YYYY") == 10 */
     
    211214        }
    212215
    213         rc = str_uint32_t(&wdate[0], NULL, 10, false, &tmp);
    214         if (rc != EOK)
    215                 return rc;
    216 
    217         t->tm_mday = tmp;
    218 
    219         rc = str_uint32_t(&wdate[3], NULL, 10, false, &tmp);
    220         if (rc != EOK)
    221                 return rc;
    222 
    223         t->tm_mon = tmp - 1;
     216        /* Parse first number */
     217        rc = str_uint32_t(&wdate[0], NULL, 10, false, &first_num);
     218        if (rc != EOK)
     219                return rc;
     220
     221        /* Parse second number */
     222        rc = str_uint32_t(&wdate[3], NULL, 10, false, &second_num);
     223        if (rc != EOK)
     224                return rc;
     225
     226        /* Determine format based on first number */
     227        if (first_num > 12) {
     228                /* First number is day (DD/MM/YYYY format) */
     229                t->tm_mday = first_num;
     230                t->tm_mon = second_num - 1;
     231        } else if (second_num > 12) {
     232                /* Second number is day (MM/DD/YYYY format) */
     233                t->tm_mon = first_num - 1;
     234                t->tm_mday = second_num;
     235        } else {
     236                /* Ambiguous case - assume DD/MM/YYYY format */
     237                t->tm_mday = first_num;
     238                t->tm_mon = second_num - 1;
     239        }
    224240
    225241        rc = str_uint32_t(&wdate[6], NULL, 10, false, &tmp);
     242        if (rc != EOK)
     243                return rc;
     244
    226245        t->tm_year = tmp - 1900;
    227246
    228         return rc;
     247        return EOK;
    229248}
    230249
     
    331350usage(void)
    332351{
    333         printf("Usage: date [-d DD/MM/YYYY] [-t HH:MM[:SS]]\n");
    334         printf("       -d   Change the current date\n");
     352        printf("Usage: date [-d DD/MM/YYYY|MM/DD/YYYY] [-t HH:MM[:SS]]\n");
     353        printf("       -d   Change the current date (supports both DD/MM/YYYY and MM/DD/YYYY formats)\n");
    335354        printf("       -t   Change the current time\n");
    336355        printf("       -h   Display this information\n");
Note: See TracChangeset for help on using the changeset viewer.