【问题标题】:Displaying a weekday name in VB在 VB 中显示工作日名称
【发布时间】:2013-05-20 10:57:54
【问题描述】:

早上好,

我正在使用日历表单控件来获取用户选择的日期和日期范围。在日历单击事件中,我刷新表单以向用户显示选定的开始和结束日期。

作为刷新的一部分,我更新了一个文本字段以显示工作日和日期:

txtStartDate.Text = WeekdayName(Weekday(startDate)) + " " + startDate

但是我得到的工作日是 1 天(星期二显示为星期一,星期一显示为星期日,星期日显示为星期六。)

为了解决这个问题,我做了以下操作:

txtStartDate.Text = WeekdayName(Weekday(startDate) - 1) + " " + startDate

这适用于周一 - 周六,但是当我在日历上选择周日时,它(事后看来很明显!)崩溃,因为它无法显示值为 -1 的日期!

我试图找到一种方法将一周的第一天设置为星期一而不是星期日,但徒劳无功。我已经对日历控件执行了此操作,但这只会更改显示的开始日期,而不是当天的值。我已尝试更改 CurrentCulture 设置:

Thread.CurrentThread.CurrentCulture = New CultureInfo("en-UK")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-UK") 

这也不行。

如何将星期一设置为 Weekday(startDate) 中的第 0 天?

【问题讨论】:

  • 为什么必须是数字?调用 DateTime 类型的 DayOfWeek 属性会有什么问题。

标签: vb.net calendar culture


【解决方案1】:

问题似乎是Weekday 默认为星期日为一周的第一天,而WeekdayName 默认为当前系统默认值。

试试这个:

txtStartDate.Text = WeekdayName(Weekday(startDate, FirstDayOfWeek.System)) + " " + startDate

【讨论】:

  • 效果很好,谢谢!我一直在尝试 firstdayofweek 选项,但在稍微错误的地方.. doh!我确实需要各个地方的工作日,所以如果可能的话,设置系统范围的 firstdayofweek 而不是每次调用 weekDayName 方法时会更有效?
【解决方案2】:

试试这个:

Dim thisCulture As Globalization.CultureInfo = Globalization.CultureInfo.CurrentCulture
Dim dayOfWeek As DayOfWeek = thisCulture.Calendar.GetDayOfWeek(startDate)
Dim dayName As String = thisCulture.DateTimeFormat.GetDayName(dayOfWeek)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多