purebasic.info

PureBasic forum
Текущее время: Пн сен 16, 2019 1:37 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Получить timestamp
СообщениеДобавлено: Ср сен 11, 2019 4:08 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 142
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Как пуриком в windows получить временую строку такого вида 2019-09-11T17:58:58.731Z


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить timestamp
СообщениеДобавлено: Ср сен 11, 2019 4:58 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6545
Благодарил (а): 29 раз.
Поблагодарили: 220 раз.
Пункты репутации: 59
WIN 32 API поддерживает пять форматов времени, и функции для получения времени и преобразования форматов с учетом часовых поясов. Вот эти типы.

System SYSTEMTIME Года, месяц, день, час, секунда, и миллисекунды,
взятые с внутренних аппаратных часов.
File FILETIME 100-наносекунд интервалов 1 Января, 1601.
Local SYSTEMTIME ИЛИ FILETIME Системное время или файловое время преобразованное
в локальное время с учетом часовых поясов.
MS-DOS WORD Упакованное 16-битовое слово для даты другое для времени.
Windows DWORD Количество миллисекунд с тех пор как загруженная система;
повторяется каждые 49.7 дней.
Структура SYSTEMTIME хранит дату и время используя отдельные поля для месяца, дня, года, дня недели, часа, минут, секунд и миллисекунд.

typedef struct _SYSTEMTIME
{
WORD wYear; // Указывает текущий год
WORD wMonth; // Текущий месяц; Январь = 1, Февраль = 2, и так далее
WORD wDayOfWeek; // Текущий день недели; Воскресенье = 0, Понедельник = 1, и так далее.
WORD wDay; // Текущий день месяца.
WORD wHour; // Час.
WORD wMinute; // Минуты.
WORD wSecond; // Секунды.
WORD wMilliseconds; // Миллисекунды.
} SYSTEMTIME;

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
; ------------------------------------------------------------
;
    Info.SYSTEMTIME                           ; Init API Structure for _SYTEMTIME()
;
; -------- Win32 API Structure --------
;
;   typedef struct _SYSTEMTIME  
;     WORD wYear
;     WORD wMonth
;     WORD wDayOfWeek
;     WORD wDay
;     WORD wHour
;     WORD wMinute
;     WORD wSecond
;     WORD wMilliseconds
;   SYSTEMTIME;
;
; ------------------------------------------------------------
;
    GetLocalTime_(Info)                       ; Get acutal LOCAL Time by System
    ;
    ; -------- Get actual Date --------
    ;
    cday$       = RSet(Str((Info\wDay)), 2, "0")
    cmonth$     = RSet(Str((Info\wMonth)), 2, "0")
    cyear$      = Str((Info\wYear))
    cwday$      = Str((Info\wDayOfWeek))
    ;
    ; -------- Get Actual Time --------
    ;
    chour$      = RSet(Str((Info\wHour)),2,"0")
    cminute$    = RSet(Str((Info\wMinute)),2,"0")
    csecond$    = RSet(Str((Info\wSecond)),2,"0")
    cmillisec$  = LSet(Str((Info\wMilliseconds)),3,"0")
    ;
    ; -------- Select cwday$ num to get correct weekday --------
    ;
    Select cwday$                           ; Same num handling like in Excel :wink:
      Case "1" : cweekday$ = "Monday"
      Case "2" : cweekday$ = "Tuesday"
      Case "3" : cweekday$ = "Wednesday"
      Case "4" : cweekday$ = "Thursday"
      Case "5" : cweekday$ = "Friday"
      Case "6" : cweekday$ = "Saturday"
      Case "0" : cweekday$ = "Sunday"      
    EndSelect
    ;
    ; -------- Write results into one string --------
    ;
    actdate$ = cyear$ + "-" + cmonth$ + "-" +  cday$ + "T"  ; cyear$ + "-" + cmonth$ + "-" +  cday$ + Left(cweekday$,2) ; дата
    acttime$ = chour$ + ":" + cminute$ + ":" + csecond$ + "." + cmillisec$ + "Z" ; время
    ;
    ; -------- Print the result to the user --------
    ;  
    ;2019-09-11T17:58:58.731Z
    MessageRequester("Actual Date:",actdate$ + acttime$,0)
     
End


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить timestamp
СообщениеДобавлено: Ср сен 11, 2019 5:18 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 142
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Нашёл вот такой вариант:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Procedure.s GetMS(date)
  GetSystemTime_(@st.SYSTEMTIME)
  ProcedureReturn Str(st\wMilliseconds)
EndProcedure
 
Procedure.s GetFullTimeStr()
 
  start = ElapsedMilliseconds()
date = Date()
date$ = FormatDate("%yyyy-%mm-%ddT%hh:%ii:%ss", date) + "." + GetMS(date)+"Z"
finish = ElapsedMilliseconds()
 
ProcedureReturn date$
 
EndProcedure
 
 
Debug GetFullTimeStr()


Может кому ещё пригодится тема.
Извиняюсь, а есть ли кроссплатформенный вариант ?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB