如何:从特定日期中提取星期几

更新:2007 年 11 月

利用 .NET Framework,可以方便地确定特定日期的星期几,并显示该特定日期的本地化星期几名称。指示与特定日期相对应的星期几的枚举值可以从 DayOfWeekDayOfWeek 属性中获取。与此不同的是,检索星期几名称是一项格式化操作,可通过调用格式化方法来执行,例如日期和时间值的 ToString 方法或 String.Format 方法。本主题演示如何执行这些格式化操作。

从特定日期中提取指示星期几的数字

  1. 如果要使用日期的字符串表示形式,请使用静态 DateTime.ParseDateTimeOffset.Parse 方法将其转换为 DateTimeDateTimeOffset 值。

  2. 使用 DateTime.DayOfWeekDateTimeOffset.DayOfWeek 属性检索指示星期几的 DayOfWeek 值。

  3. 如有必要,可将 DayOfWeek 值强制转换(在 C# 中)或转换(在 Visual Basic 中)为整数。

下面的示例将显示一个整数,用于表示日期字符串表示形式中的星期几。

Dim dateValue As Date = #6/11/2008#
Console.WriteLine(dateValue.DayOfWeek)           ' Displays 3
DateTime dateValue = new DateTime(2008, 6, 11);
Console.WriteLine((int) dateValue.DayOfWeek);      // Displays 3

从特定日期中提取缩写的星期几名称

  1. 如果要使用日期的字符串表示形式,请使用静态 DateTime.ParseDateTimeOffset.Parse 方法将其转换为 DateTimeDateTimeOffset 值。

  2. 您可以提取当前区域性或特定区域性的缩写的星期几名称:

    1. 若要提取当前区域性的缩写的星期几名称,请调用日期和时间值的 DateTime.ToString(String)DateTimeOffset.ToString(String) 实例方法,并以 format 参数的形式传递字符串“ddd”。下面的示例阐释对 ToString(String) 方法的调用。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("ddd"))    ' Displays Wed
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("ddd"));    // Displays Wed
      
    2. 若要提取特定区域性的缩写的星期几名称,请调用日期和时间值的 DateTime.ToString(String, IFormatProvider)DateTimeOffset.ToString(String, IFormatProvider) 实例方法。同时以 format 参数形式传递字符串“ddd”,并以 provider 参数的形式传递表示要检索其星期几名称的区域性的 CultureInfoDateTimeFormatInfo 对象。下面的代码阐释如何使用表示 fr-FR 区域性的 CultureInfo 对象调用 ToString(String, IFormatProvider) 方法。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("ddd", _
                        New CultureInfo("fr-FR")))    ' Displays mer.
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("ddd", 
                        new CultureInfo("fr-FR")));    // Displays mer.
      

从特定日期中提取完整的星期几名称

  1. 如果要使用日期的字符串表示形式,请使用静态 DateTime.ParseDateTimeOffset.Parse 方法将其转换为 DateTimeDateTimeOffset 值。

  2. 您可以提取当前区域性或特定区域性的完整的星期几名称:

    1. 若要提取当前区域性的完整的星期几名称,请调用日期和时间值的 DateTime.ToString(String)DateTimeOffset.ToString(String) 实例方法,并以 format 参数的形式传递字符串“dddd”。下面的示例阐释对 ToString(String) 方法的调用。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("dddd"))    ' Displays Wednesday
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("dddd"));    // Displays Wednesday
      
    2. 若要提取特定区域性的星期几名称,请调用日期和时间值的 DateTime.ToString(String, IFormatProvider)DateTimeOffset.ToString(String, IFormatProvider) 实例方法。同时以 format 参数的形式传递字符串“dddd”,并以 provider 参数的形式传递表示要检索其星期几名称的区域性的 CultureInfoDateTimeFormatInfo 对象。下面的代码阐释如何使用表示 es-ES 区域性的 CultureInfo 对象调用 ToString(String, IFormatProvider) 方法。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("dddd", _
                        New CultureInfo("es-ES")))     ' Displays mircoles.
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("dddd", 
                        new CultureInfo("es-ES")));    // Displays mircoles.
      

示例

该示例阐释如何调用 DateTime.DayOfWeekDateTimeOffset.DayOfWeek 属性以及 DateTime.ToStringDateTimeOffset.ToString 方法,以检索特定日期中表示星期几的数字、缩写的星期几名称和完整的星期几名称。

Dim dateString As String = "6/11/2007"
Dim dateValue As Date
Dim dateOffsetValue As DateTimeOffset

Try
   Dim dateTimeFormats As DateTimeFormatInfo
   ' Convert date representation to a date value
   dateValue = Date.Parse(dateString, CultureInfo.InvariantCulture)
   dateOffsetValue = New DateTimeOffset(dateValue, _
                               TimeZoneInfo.Local.GetUtcOffset(dateValue))            
   ' Convert date representation to a number indicating the day of week
   Console.WriteLine(dateValue.DayOfWeek)
   Console.WriteLine(dateOffsetValue.DayOfWeek)

   ' Display abbreviated weekday name using current culture
   Console.WriteLine(dateValue.ToString("ddd"))
   Console.WriteLine(dateOffsetValue.ToString("ddd"))

   ' Display full weekday name using current culture
   Console.WriteLine(dateValue.ToString("dddd"))
   Console.WriteLine(dateOffsetValue.ToString("dddd"))

   ' Display abbreviated weekday name for de-DE culture
   Console.WriteLine(dateValue.ToString("ddd", New CultureInfo("de-DE")))
   Console.WriteLine(dateOffsetValue.ToString("ddd", _
                                              New CultureInfo("de-DE")))

   ' Display abbreviated weekday name with de-DE DateTimeFormatInfo object
   dateTimeFormats = New CultureInfo("de-DE").DateTimeFormat
   Console.WriteLine(dateValue.ToString("ddd", dateTimeFormats))
   Console.WriteLine(dateOffsetValue.ToString("ddd", dateTimeFormats))

   ' Display full weekday name for fr-FR culture
   Console.WriteLine(dateValue.ToString("ddd", New CultureInfo("fr-FR")))
   Console.WriteLine(dateOffsetValue.ToString("ddd", _
                                              New CultureInfo("fr-FR")))

   ' Display abbreviated weekday name with fr-FR DateTimeFormatInfo object
   dateTimeFormats = New CultureInfo("fr-FR").DateTimeFormat
   Console.WriteLine(dateValue.ToString("dddd", dateTimeFormats))
   Console.WriteLine(dateOffsetValue.ToString("dddd", dateTimeFormats))
Catch e As FormatException
   Console.WriteLine("Unable to convert {0} to a date.", dateString)
End Try
' The example displays the following output to the console:
'       1
'       1
'       Mon
'       Mon
'       Monday
'       Monday
'       Mo
'       Mo
'       Mo
'       Mo
'       lun.
'       lun.
'       lundi
'       lundi
string dateString = "6/11/2007";
DateTime dateValue;
DateTimeOffset dateOffsetValue;

try
{
   DateTimeFormatInfo dateTimeFormats;
   // Convert date representation to a date value
   dateValue = DateTime.Parse(dateString, CultureInfo.InvariantCulture);
   dateOffsetValue = new DateTimeOffset(dateValue, 
                                TimeZoneInfo.Local.GetUtcOffset(dateValue));         

   // Convert date representation to a number indicating the day of week
   Console.WriteLine((int) dateValue.DayOfWeek);
   Console.WriteLine((int) dateOffsetValue.DayOfWeek);

   // Display abbreviated weekday name using current culture
   Console.WriteLine(dateValue.ToString("ddd"));
   Console.WriteLine(dateOffsetValue.ToString("ddd"));

   // Display full weekday name using current culture
   Console.WriteLine(dateValue.ToString("dddd"));
   Console.WriteLine(dateOffsetValue.ToString("dddd"));

   // Display abbreviated weekday name for de-DE culture
   Console.WriteLine(dateValue.ToString("ddd", new CultureInfo("de-DE")));
   Console.WriteLine(dateOffsetValue.ToString("ddd", 
                                               new CultureInfo("de-DE")));

   // Display abbreviated weekday name with de-DE DateTimeFormatInfo object
   dateTimeFormats = new CultureInfo("de-DE").DateTimeFormat;
   Console.WriteLine(dateValue.ToString("ddd", dateTimeFormats));
   Console.WriteLine(dateOffsetValue.ToString("ddd", dateTimeFormats));

   // Display full weekday name for fr-FR culture
   Console.WriteLine(dateValue.ToString("ddd", new CultureInfo("fr-FR")));
   Console.WriteLine(dateOffsetValue.ToString("ddd", 
                                              new CultureInfo("fr-FR")));

   // Display abbreviated weekday name with fr-FR DateTimeFormatInfo object
   dateTimeFormats = new CultureInfo("fr-FR").DateTimeFormat;
   Console.WriteLine(dateValue.ToString("dddd", dateTimeFormats));
   Console.WriteLine(dateOffsetValue.ToString("dddd", dateTimeFormats));
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert {0} to a date.", dateString);
}
// The example displays the following output to the console:
//       1
//       1
//       Mon
//       Mon
//       Monday
//       Monday
//       Mo
//       Mo
//       Mo
//       Mo
//       lun.
//       lun.
//       lundi
//       lundi

个别语言可能提供与 .NET Framework 所提供的功能相同或互为补充的功能。例如,Visual Basic 就包括这样的两个函数:

  • Weekday,它返回指示特定日期中表示星期几的数字。此函数将一周中第一天的序数值视为一,而 DateTime.DayOfWeek 属性却将其视为零。

  • WeekdayName,它返回当前区域性中与特定星期几相对应的周的名称。

下面的示例阐释 Visual Basic Weekday 和 WeekdayName 函数的用法。

Dim dateValue As Date = #6/11/2008#

' Get weekday number using Visual Basic Weekday function
Console.WriteLine(Weekday(dateValue))                 ' Displays 4
' Compare with .NET DateTime.DayOfWeek property
Console.WriteLine(dateValue.DayOfWeek)                ' Displays 3

' Get weekday name using Weekday and WeekdayName functions
Console.WriteLine(WeekdayName(Weekday(dateValue)))    ' Displays Wednesday

' Change culture to de-DE
Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")
' Get weekday name using Weekday and WeekdayName functions
Console.WriteLine(WeekdayName(Weekday(dateValue)))   ' Displays Donnerstag

' Restore original culture
Thread.CurrentThread.CurrentCulture = originalCulture   

也可以使用 DateTime.DayOfWeek 属性返回的值检索特定日期的星期几名称。此过程只需对 DayOfWeek 属性返回的值调用 ToString 方法。但是,此技术并不生成当前区域性的本地化星期几名称,如下面的示例所示。

' Change current culture to fr-FR
Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")

Dim dateValue As Date = #6/11/2008#
' Display the DayOfWeek string representation
Console.WriteLine(dateValue.DayOfWeek.ToString())     ' Displays Wednesday
' Restore original current culture
Thread.CurrentThread.CurrentCulture = originalCulture
// Change current culture to fr-FR
CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

DateTime dateValue = new DateTime(2008, 6, 11);
// Display the DayOfWeek string representation
Console.WriteLine(dateValue.DayOfWeek.ToString());   // Displays Wednesday
// Restore original current culture
Thread.CurrentThread.CurrentCulture = originalCulture;

编译代码

这些示例可能需要:

这些示例还要求:

  • 将对 System.Core.dll 的引用添加到任何添加了代码示例的项目中。

请参见

概念

格式化帮助主题

日期与时间格式字符串

标准日期和时间格式字符串

自定义日期和时间格式字符串