日付を環境設定の書式に合わせる
Top > Tips > etc

日付や金額の表示形式は、国によって違っています。
日本では「年月日」が一般的ですが、欧米では「月日年」と年が最後にきますし、場合によっては「日月年」だったりします。
Palmマシンは環境設定で日付などの書式を設定できるので、アプリが日付を表示するときは、設定された書式に合わせて表示します。

まず、環境設定の設定値を取得する処理ですが、PrefGetPreference関数(Palm OS 2.0以降)により行います。
次に日付のデータを書式に合った文字列に変換しますが、 Palm OSにはDateToAscii関数とDateTemplateToAscii関数の2つの関数が用意されています。

DateToAscii関数は、環境設定から取得した値を直接指定して、日付を書式に合わせて変換します。
    UInt16          years;
    UInt8           months;
    UInt8           days;
    DateFormatType  dateFormat;
    Char            buff[dateStringLength];

    years  = 2004;  /* 年 */
    months =   11;  /* 月 */
    days   =   23;  /* 日 */

    dateFormat = PrefGetPreference(prefDateFormat);        /* 日付書式取得 */

    /* 日付を指定の書式で文字列に変換 */
    DateToAscii(months, days, years, dateFormat, buff);

DateTemplateToAscii関数は、Palm OS 3.5以降で使用可能で、任意の書式を指定して日付を文字列に変換します。
書式を自由に指定できるので、環境設定に無い書式にする事ができますが、 環境設定の書式設定に合わせる為には、 設定値に合わせて書式を作成する処理が必要になります。

書式設定に合わせて、年を4桁表示にする関数は以下のようになります。
Boolean DateToLongAscii(
    UInt16 years,       /* I:年 */
    UInt8 months,       /* I:月 */
    UInt8 days,         /* I:日 */
    CharPtr pBuff,      /* O:変換結果文字列 */
    Int16 buffSize)     /* I:バッファサイズ */
{
    Boolean         ret = true;
    DateFormatType  dateFormat;

    dateFormat = PrefGetPreference(prefDateFormat);     /* 日付書式取得 */
    switch (dateFormat)
    {
    case dfYMDWithSlashes:      /* 04/11/23 */
        DateTemplateToAscii("^4r/^3r/^0r", months, days, years, pBuff, buffSize);
        break;

    case dfYMDWithDots:         /* 04.11.23 */
        DateTemplateToAscii("^4r.^3r.^0r", months, days, years, pBuff, buffSize);
        break;

    case dfYMDWithDashes:       /* 04-11-23 */
        DateTemplateToAscii("^4r-^3r-^0r", months, days, years, pBuff, buffSize);
        break;

    case dfMDYWithSlashes:      /* 11/23/04 */
        DateTemplateToAscii("^3r/^0r/^4r", months, days, years, pBuff, buffSize);
        break;

    case dfDMYWithSlashes:      /* 23/11/04 */
        DateTemplateToAscii("^0r/^3r/^4r", months, days, years, pBuff, buffSize);
        break;

    case dfDMYWithDots:         /* 23.11.04 */
        DateTemplateToAscii("^0r.^3r.^4r", months, days, years, pBuff, buffSize);
        break;

    case dfDMYWithDashes:       /* 23-11-04 */
        DateTemplateToAscii("^0r-^3r-^4r", months, days, years, pBuff, buffSize);
        break;

    case dfMDYWithDashes:       /* 11-23-04 (Palm OS 4.0以降) */
        DateTemplateToAscii("^3r-^0r-^4r", months, days, years, pBuff, buffSize);
        break;

    default:
        ret = false;
        break;
    }

    return ret;
}

実行サンプル画面

'04/11/23 新規作成