Как определить номер недели для заданной даты?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Как определить номер недели для заданной даты?

Сообщение Thomas » 11.12.2005 (Вс) 21:39

Приветствую всех.
Сложность следующая:
На форме расположен MonthCalender и три TextBox, в которые выводятся значения:
- длинная нотация даты( день недели, число, месяц год)
- день года
- номер недели.
из ходя из выделенной даты на календаре.
Первые два параметра вычисляются без проблем , а вот номер недели - никак. :cry:
Подскажите плиз ... :?:
Код: Выделить всё

Public Class clsDatum
    Private mDatum As DateTime
    Private mDatumlang, DayOfWeek, mUSdatum, WeekOfYear As String

    Public Property Datum()
        Get
            Return mDatum
        End Get
        Set(ByVal Value)
            mDatum = Value
        End Set
    End Property
    Public ReadOnly Property Datumlang()
        Get
            mDatumlang = mDatum.ToLongDateString()
            DayOfWeek = mDatum.DayOfWeek.ToString
            Return DayOfWeek & " " & mDatumlang
        End Get
    End Property
    Public ReadOnly Property Weeknummer()
        Get
            WeekOfYear = mDatum.DayOfYear \ 7 + 1
            Return WeekOfYear '// но так номер отображается не корректно
        End Get
    End Property
    Public ReadOnly Property USdatum()
        Get
            mUSdatum = Format(mDatum, "MM/dd/yyyy")
            Return mUSdatum
        End Get
    End Property
End Class

'// код формы

Dim datum As New clsDatum

    Private Sub calManden_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles calManden.DateChanged
        datum.Datum = calManden.SelectionStart '//задаем дату на календаре
        txtLd.Text = datum.Datumlang '// пишем длинную нотацию
        txtWnr.Text = datum.Weeknummer '// пишем номер недели
        txtUSd.Text = datum.USdatum '// пишем американскую нотацию даты
    End Sub

Заранее спасибо.

ЗЫ По сайту и в MSDN искал, но не нашел.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 11.12.2005 (Вс) 22:24

Что значит "некорректно" ?

Тебя интересует календарная неделя или математическая?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 12.12.2005 (Пн) 0:37

Sebas
приветствую.
Наверное интересует календарная неделя.
Некорректно потому, что если 1 января не понедельник, а к примеру четверг, то первая неделя будет 1-4 января, и с 5 января - понедельник начинается вторая неделя. А то, что я сделал, будет отображать понедельник еще первой неделей.

В свойствах DateTime нету WeekOfYear. DayOfWeek, DayOfYear присутствуют, а вот номера недели нет.

И мои поиски по MSDN до сих пор не увенчались успехом.
По идее должна быть какая либо фикча, которая определяет это дело.
Вопрос где найти?
Будем искать.

Всего доброго.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.12.2005 (Пн) 3:55

Код: Выделить всё
WeekOfYear = mDatum.DayOfYear \ 7 + 1

Вот это вот считать не от первого дня года, а от первого понедельника года, причём если первый день года не понедельник, то добавить 1 единицу к итогу.

Первый понедельник года -
with new datetime(mdatum.year,1,1)
if .dayofweek<=dayofweek.monday then return .adddays(1-.dayofweek) else return .adddays(7-.dayofweek+dayofweek.monday)
end with
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 13.12.2005 (Вт) 23:07

Приветствую всех.
Спасибо всем кто откликнулся на зов о помощи. Респект.

А ларчик просто открывался:
WeekOfYear = DatePart(DateInterval.WeekOfYear, mDatum, FirstDayOfWeek.Monday, FirstWeekOfYear.Jan1)

Как я и предпологал существует функция DatePart
Вот ее описание
http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/vblr7/html/vafctdatepart.asp

ЗЫ А я выходит плохо искал.

Всем всего доброго.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList  
cron