Есть ли программный способ получить короткие названия дней в Windows? - PullRequest
3 голосов
/ 31 июля 2009

Есть ли способ получить двухзначное название дня недели, например, MO / TU / WE / TH / FR / SA / SU?

В настоящее время я знаю только об использовании FormatDateTime ():

 "ddd" returns "Fri"
 "dddd" returns "Friday"

Основная причина в том, что я хочу получить локализованную версию имен дня из 1 или 2 символов:

Скажите, что в пятницу "пятница" вернется:
Французская Windows = "Vendredi", 2 символа будут "VE", обратите внимание, что это 1-й и 2-й символ.
Windows Windows = "星期五", символ будет "五", обратите внимание, что это третий символ.
Японская Windows = "金曜日", символ будет "金", обратите внимание, что это первый символ.

Edit1: В настоящее время используется Delphi, но я думаю, что это относится и к другим языкам.

Edit2: Проще говоря, я стремлюсь получить более короткую версию "ShortDayName" за счет использования некоторых функций или констант, чтобы мне не нужно было создавать таблицу констант, содержащих 7-дневный "Shorter" "названия дней для каждого возможного языка Windows.

Интересно, действительно ли такие функции существуют.
Может быть, названия календаря с 1 или 2 символами дня в Outlook сами по себе жестко закодированы?

Ответы [ 3 ]

3 голосов
/ 31 июля 2009

Вы можете получить локальные имена для дней недели с помощью ShortDayNames и LongDayNames , и вы можете использовать DayOfWeek для получения числового значения для день.

ShortDayNames[Index]; //Returns Fri

или

LongDayNames[Index]; //Returns Friday

Единственный способ, которым я знаю, сократить их до двух символов, это обрезать полученную строку

LeftStr(LongDayNames[Index],2);//Returns Fr

Итак, сегодняшний день будет

LeftStr(LongDayNames[DayOfWeek(date)],2); //Returns Fr
2 голосов
/ 31 июля 2009

Нажмите здесь

Описывает стандарты в настраиваемом формате даты.

Вы также можете использовать стандарт 'ddd' и обрезать его.

1 голос
/ 31 июля 2009

Процедуры Delphi не делают ничего особенного - они просто спрашивают ОС. Вот как это сделать: Получение информации о времени и дате . Я просмотрел документы MSDN и нашел это .

Обратите внимание, что на самом деле здесь нет такой вещи, как "двухзначное имя дня" или "трехзначное имя дня". Существуют следующие форматы: «родной» («длинный» в Delphi), сокращенный («короткий» в Delphi) или короткий (Vista и более поздние версии, отсутствующие в Delphi).

Например, сокращенное название дня недели для понедельника: понедельник (3 знака, en-US), Пн (2 знака, ru-RU).

Итак, вы, вероятно, ищете формат LOCALE_SSHORTESTDAYNAMEX (который MSDN называет «коротким» и не появляется в Delphi), но он доступен только в Vista и выше.

Например, следующий код:

const
  LOCALE_SSHORTESTDAYNAME1 = $60;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetThreadLocale($409);
  ShowMessage(
    GetLocaleStr(GetThreadLocale, LOCALE_SSHORTESTDAYNAME1, '') + #13#10 +
    GetLocaleStr(GetThreadLocale, LOCALE_SABBREVDAYNAME1, '')
             );
end;

покажет вам:

Мо

Пн

Но если сделать это для русского языка, то получится:

1029 * Пн *

1031 * Пн *

Надеюсь, мои изменения сделают ответ более ясным;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...