是否有程序化的方法来获取Windows中的短日期名称?

时间:2009-07-31 11:20:57

标签: windows delphi winapi

有没有办法获得一周2个字符的日名,如MO / TU / WE / TH / FR / SA / SU?

目前我只知道使用FormatDateTime():

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

主要原因是我想获得1或2个字符日名称的本地化版本:

在“ddd”中说FRIDAY会返回:
法语Windows =“Vendredi”,2个字符将是“VE”,注意它是第1和第2个字符。
中文Windows =“星期五”,字符为“五”,注意它是第3个字符 日语Windows =“金曜日”,字母将是“金”,注意它是第一个字符。

EDIT1: 目前使用Delphi,但我认为也适用于其他语言。

EDIT2: 简单地说,我希望通过使用一些函数或常量来获得较短版本的“ShortDayName”,这样我就不必构建包含7天的常量表“每种可能的Windows语言都有较短的“天名”。

我想知道这些功能是否真的存在 也许Outlook中的日历1或2个char天名称本身就是硬编码的,对吗?

3 个答案:

答案 0 :(得分:3)

您可以使用ShortDayNamesLongDayNames获取一周中某些日期的本地名称,并且可以使用DayOfWeek获取当天的数值。

ShortDayNames[Index]; //Returns Fri

LongDayNames[Index]; //Returns Friday

我知道将它们缩短为两个字符的唯一方法是修剪结果字符串

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

所以今天是

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

答案 1 :(得分:2)

Click Here

描述自定义日期格式的标准。

您也可以使用'ddd'标准并修剪它。

答案 2 :(得分:1)

Delphi的例程并没有什么特别之处 - 他们只是问OS。 以下是如何:Retrieving Time and Date Information。我浏览了MSDN文档并找到了this

请注意,这里没有“2个字符的日名”或“3个字符的日名”。有:native(Delphi中的“long”),缩写(Delphi中的“short”)或short(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;

会告诉你:

  

     

周一

但为俄语做这件事会输出:

  

Пн

     

Пн

希望我的编辑能让答案更清晰;)