powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Номер недели месяца
12 сообщений из 37, страница 2 из 2
Номер недели месяца
    #34234717
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.gsnti-norms.ru/norms/common/doc.asp?2&/norms/stands/8601.htm

-------------------------------------------------------------------------
Скоро может начаться такая борьба за мир, что камня на камне не останется.
...
Рейтинг: 0 / 0
Номер недели месяца
    #34243058
orient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:)) как оказалось получить номер недели в месяце нетривиальная задача
то что касается функции, то она действительно не работает так как надо, она была взята из SQL Server-a, загвоздка в том что там можно установить параметр- первый день недели равным 1 т.е. понедельник, а функция DayOfWeek возвращает значения от 0(воскресенье) до 6(суббота)
...
Рейтинг: 0 / 0
Номер недели месяца
    #34272122
avb-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
//по номеру дня недели, месяцу, году и номеру недели месяца возвращает число месяца
int CDate::Compute_Date(int iNumberDay, int iMonth, int iYear, int nWeek)
{
int iFirstWDay=Compute_Day(1, iMonth, iYear);
int delta=iNumberDay-iFirstWDay;
int iret;
if(delta>=0)
iret= 1+(7*(nWeek-1))+delta;
else
iret= 8+(7*(nWeek-1))+delta;
if(LeapYear(iYear)==TRUE)
{
const int iMn[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
if(iret>iMn[iMonth])
iret=iret-7;
}
else
{
const int iMn[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(iret>iMn[iMonth])
iret=iret-7;
}
return iret;
}
//определяет номер недели в месяце
int CDate::getNumWeek(int day, int month, int year)
{

int ndweek=Compute_Day(1, month, year);//функция определяет день недели
int week = (ndweek+day) / 7;
if ((ndweek+day) % 7 > 0)
week += 1;
return week;



}
...
Рейтинг: 0 / 0
Номер недели месяца
    #34272127
avb-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В предыдущем сообщении не ту функцию дал
//номер дня недели
int CDate::Compute_Day(int day, int month, int year)
{
int dy ;
int yr ;
int mn ;
int n1 ;
int n2 ;
/* Смещение используемой системы от системы Зеллера
* Замечание
*
* Соответствие Зеллера определяет субботу как 0. Большинство приложений
* в качестве 0 используют воскресенье. Параметр ZELLER_OFFSET используется
* для перевода из системы Зеллера в нужную систему.
*/
#define ZELLER_OFFSET -2

yr = year ;
mn = month ;

/* Январь или Февраль? */
/* -------------------- */
if (mn < 3)
{
/* да, делаем их частью предыдущего года */
/* --------------------------------- */
mn += 12 ;
yr -= 1 ;
}

n1 = (26 * (mn + 1)) / 10 ;
n2 = (int) ((125 * (long) yr) / 100) ;

dy = ((day + n1 + n2 - (yr / 100) + (yr / 400) + ZELLER_OFFSET) % 7) ;

return dy ;
}
...
Рейтинг: 0 / 0
Номер недели месяца
    #34272145
Moristar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Специальность ПО, 1-й курс :)
...
Рейтинг: 0 / 0
Номер недели месяца
    #34810466
Ilya.volodin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как японимаю : Нужно вычислить номер недели года начала месяца - НомНедНачМесяца, потом вычислить номер недели года вышей даты - НомНедЗначения, а потом результат = НомНедЗначения - НомНедНачМесяца +1;
...
Рейтинг: 0 / 0
Номер недели месяца
    #34811299
Ilya.volodin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya.volodinКак японимаю : Нужно вычислить номер недели года начала месяца - НомНедНачМесяца, потом вычислить номер недели года вышей даты - НомНедЗначения, а потом результат = НомНедЗначения - НомНедНачМесяца +1;

сообветственно если нужно получить номер дня недели месяца то единицу прибавлять к результату не нужно при условии ДеньНеделиНачалаМесяца>ДеньНеделиЗначение
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Номер недели месяца
    #38910444
Demidkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orientКак определить номер недели месяца, к которой относится текущая дата

Так и не нашел нормального варианта в интернете, пришлось придумать свой.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public int GetWeekOnMonth(DateTime CurDate)
        {
            DateTime date1 = CurDate; // сюда получим дату первого числа месяца
            date1 = date1.AddDays(1 - date1.Day); // дату на первое число
            int date1_DeyOfWeek = Convert.ToInt32(date1.DayOfWeek); // Получаем день недели для первого числа
            if (date1_DeyOfWeek == 0) date1_DeyOfWeek = 7; // Если воскресенье то 0 меняем на 7;
            date1_DeyOfWeek = date1_DeyOfWeek - 1; // смещение даты = день недели минус 1

            int week = (CurDate.Day + date1_DeyOfWeek) / 7; //день недели если делиться нацело
            if ((CurDate.Day + date1_DeyOfWeek) % 7 > 0) week++; // иначе +1
            return week;
        }
...
Рейтинг: 0 / 0
Номер недели месяца
    #38912337
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Demidkin,

теперь стирайте. :-)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
      DateTime date1 = new DateTime(2011, 1, 1);
      Calendar cal = dfi.Calendar;

      Console.WriteLine("{0:d}: Week {1} ({2})", date1, 
                        cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, 
                                          dfi.FirstDayOfWeek),
                        cal.ToString().Substring(cal.ToString().LastIndexOf(".") + 1));       
   }
}
...
Рейтинг: 0 / 0
Номер недели месяца
    #38912344
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Demidkin,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
	

DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
DateTime date1 = DateTime.Now;//			 new DateTime(2011, 1, 1);
Calendar cal = dfi.Calendar;
int weekNumY = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);

int weekNumM = weekNumY / 4;



Или вам надо точнее?
...
Рейтинг: 0 / 0
Номер недели месяца
    #38912354
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Или вам надо точнее?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
DateTimePicker containerOfDate = sender as DateTimePicker;


DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
DateTime date1 = containerOfDate.Value;//			DateTime.Now;//			 new DateTime(2011, 1, 1);
Calendar cal = dfi.Calendar;
int weekNumY = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);

int weekNumM = weekNumY-  date1.Month*4;



Вот, теперь вопрос не издевательский.
...
Рейтинг: 0 / 0
Номер недели месяца
    #38915903
dnrap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129Вот, теперь вопрос не издевательский.

И все равно неправильно.
В месяце не точно 4 недели, а может быть и 5 и даже 6! (03.2015 в пример)

Правильно вычислять разницу между неделями от указанной даты до начала месяца.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            int GetWeekNumberOfMonth(DateTime dateTime)
            {
                DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
                DateTime date1 = dateTime;
                DateTime date2 = dateTime.AddDays(-dateTime.Day + 1);
                Calendar cal = dfi.Calendar;
                int weekNumY1 = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);
                int weekNumY2 = cal.GetWeekOfYear(date2, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);

                int weekNumM = weekNumY1 - weekNumY2 + 1;
                return weekNumM;
            }
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Номер недели месяца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]