На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> про дату
    Помогите, есть ли у кого пример кода или алгоритм преобразования даты в формате(char,string) дд/мм/гггг в числовой тип, ну как в Excel-e, набрал дату, а тебе число с учетом високосных и дней в каждом месяце, начиная с 1900г.
    Можно конечно Format юзать, но мне надо С (короче под DOSom), а там такой функции вроде нет.
      Создай массив, содержащий количество дней во всех предыдущих месяцах, т.е.
      [1]Январь = 0
      [2]Февраль = 31
      [3]Март = 31+28

      Затем...
      if (Год mod 4 = 0 && (Год mod 100 <> 0 || Год mod 400 = 0) && Месяц < 3) NoVis = 1 else NoVis = 0  // Если сейчас год високосный, но ещё не март, то NoVis=1...
      День = (Год-1900)*365 + МассивСДнями[НомерМесяца] + Число + Год div 4 - Год div 100 + Год div 400 - (1900 div 4 - 1900 div 100 + 1900 div 400) - NoVis
      Секунда = Час*3600 + Минута*60 + Секунда

      День 1 января 1900 года = 1 (если нужен 0, вычти 1)
      Если я нигде не ошибся, то должно быть так.... лучше проверь (подставь 29 февраля 2000 года и 1 марта 2000 года....)

      Високосный год - год, номер которого делится на 4, но не делится на 100. НО! Если номер года делится на 400, год считается високосным...
        если я правильно понял
        Цитата

        преобразования даты в формате(char,string) дд/мм/гггг в числовой тип

        , тебе нужно нечто вроде этого
        ExpandedWrap disabled
          <br>void CdmsDate::SetDateStr(const char* in)<br>{<br>      const      char* tmp=in;<br>      char ogranich=2;<br>      day=0;<br>      while(isdigit(*tmp)&&ogranich)<br>      {<br>            day*=10;<br>            day+=(*tmp)-48;<br>            tmp++;<br>            ogranich--;<br>      }<br>      //теперь tmp указывает на точку<br>      tmp++;<br>      ogranich=2;<br>      month=0;<br>      while(isdigit(*tmp)&&ogranich)<br>      {<br>            month*=10;<br>            month+=*tmp-48;<br>            tmp++;<br>            ogranich--;<br>      }<br>      //tmp указsвает на вторую точку (разделитель)<br>      tmp++;<br>      ogranich=4;<br>      year=0;<br>      while(isdigit(*tmp)&&ogranich)<br>      {<br>            year*=10;<br>            year+=*tmp-48;<br>            tmp++;<br>            ogranich--;<br>      }<br>      <br>            if(!CheckParity()) throw Error();<br>}<br><br>bool CdmsDate::CheckParity()<br>{<br>      if(year<=0) return false;<br>      if(month<1||month>12) return false;<br>      char nDay=monthes[month-1];<br>      if(month==2&&CheckYear(year)) nDay++;<br>      if(day<1||day>nDay)return false;<br>      return true;<br><br>}<br><br>


        хех, хотя в С нет исключений... ну ладно посленюю строчку SetDateStr()
        там где throw Error() поменяешь.
        получишь три числа Day,month, year а дальше читай сообщение 7in'п еще раз:))
          Спасибо всем кто ответил, и кто просто читал!!!
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0.0782 ]   [ 15 queries used ]   [ Generated: 5.10.26, 23:59 GMT ]