конвертировать строку в формат даты

Тема в разделе "WASM.BEGINNERS", создана пользователем zxcc, 23 янв 2009.

  1. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Здравствуйте.Подскажите как можно конвертировать строку(пример:пятница 23 января 2009 14:01:00) в формат даты (DATA SYSTEMTIME <?>).
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    ну а в чем проблема то? формат не знаешь? гугл сказал, что в SYSTEMTIME 64 бита:
    0-7 - год
    8-15 - месяц
    16-23 - день недели
    24-31 - день (1-31)
    32-39 - час
    40-47 - минута
    48-55 - секунда
    56-63 - милисекунда

    считываешь строку и анализируешь... разбиваешь её по пробелам на подстроки... анализируешь подстроки и тд...
     
  3. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    А можно подробнее ......разбиваешь её по пробелам на подстроки.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    язык какой? если Си-подобный, то:
    разбиение строки на подстроки с помощью функции strtok или wcstok, если юникод...
    http://msdn.microsoft.com/en-us/library/2c8d19sb(VS.71).aspx

    дальше анализируешь... первая подстрока с днем недели - сравниваешь с помощью strcmp (или wcscmp, если юникод) со строками "понедельник", ..., "воскресенье"... и так далее...

    последнюю подстроку (5ая, со временем) так же разбиваешь по подстрокам, но уже с разделителем ":" и тд...

    ЗЫ функцию преобразования строки в число можно и самому написать, есть и стандартные, но я не помню...
    ЗЗЫ если язык - ассемблер, то тут я тебе не помошник))))
     
  5. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Спасибо Rel.Но как раз ассемблер.
     
  6. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Ну х.з че-то в этом роде. Функцию Ansi2Int сам реализуешь?
    Код (Text):
    1. ;Ansi2Int конвертирует слово, на которое указывает edi в число и возвращает число в edx,
    2. ;при этом edi после выполнения указывает на следующее слово
    3. days    db 'По','Вт','Ср','Че','Пя','Су','Во'
    4. months db 'Янва','Февр','Март','Апре','Май ','Июнь','Июль','Авг','Сент','Октя','Нояб','Дека'
    5. ;
    6. mov   ecx,-1
    7. mov   ax,word[text]
    8. mov   edx,ecx
    9. mov   edi,days
    10. repne scasw
    11. sub   edx,ecx
    12. lea   eax,[edx-1]
    13. shl   eax,16
    14.  
    15. mov   edi,text
    16. mov   al,' '
    17. repne scasb  
    18. inc   edi
    19. call  Ansi2Int
    20. shl   edx,24
    21. or    eax,edx
    22.  
    23. mov   edx,ecx
    24. push  edi
    25. push  eax
    26. mov   edi,months
    27. mov   eax,[edi]
    28. repne scasd
    29. sub   edx,ecx
    30. pop   eax
    31. pop   edi
    32. dec   dx
    33. shl   dx,8
    34. or    ax,dx
    35.  
    36. mov   al,' '
    37. repne scasb  
    38. inc   edi
    39. call  Ansi2Int
    40. sub  edx,1891 ;Не знаю точно
    41. or    ax,dx
    42.  
    43. mov dword[date],eax
    44.  
    45. call  Ansi2Int
    46. mov dword[date+4],edx
    47. call  Ansi2Int
    48. mov dword[date+5],dx
    49. call  Ansi2Int
    50. mov dword[date+6],dx
     
  7. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Rel
    А Microsoft Programmers Guide говорит, что 128 бит
    Код (Text):
    1. typedef struct _SYSTEMTIME {  // st  
    2.     WORD wYear;
    3.     WORD wMonth;
    4.     WORD wDayOfWeek;
    5.     WORD wDay;
    6.     WORD wHour;
    7.     WORD wMinute;
    8.     WORD wSecond;
    9.     WORD wMilliseconds;
    10. } SYSTEMTIME;