有没有办法获得一周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天名称本身就是硬编码的,对吗?
答案 0 :(得分:3)
您可以使用ShortDayNames和LongDayNames获取一周中某些日期的本地名称,并且可以使用DayOfWeek获取当天的数值。
ShortDayNames[Index]; //Returns Fri
或
LongDayNames[Index]; //Returns Friday
我知道将它们缩短为两个字符的唯一方法是修剪结果字符串
LeftStr(LongDayNames[Index],2);//Returns Fr
所以今天是
LeftStr(LongDayNames[DayOfWeek(date)],2); //Returns Fr
答案 1 :(得分:2)
答案 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;
会告诉你:
沫
周一
但为俄语做这件事会输出:
Пн
Пн
希望我的编辑能让答案更清晰;)