Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 571
1

Время в формате UTF

21.09.2013, 18:34. Показов 2400. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется код
Кликните здесь для просмотра всего текста
Visual Basic
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
Option Explicit
Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
Private Type TIME_ZONE_INFORMATION
    Bias As Long
    StandardName(32) As Integer
    StandardDate As SYSTEMTIME
    StandardBias As Long
    DaylightName(32) As Integer
    DaylightDate As SYSTEMTIME
    DaylightBias As Long
End Type
 
Public Function utfzona(UTF)
    Dim a As TIME_ZONE_INFORMATION
    GetTimeZoneInformation a
    utfzona = a.Bias / 60
End Function

Выводит текущий часовой пояс, у меня -11
Как применять часовой пояс чтоб время и дата изменялись согласно введённой зоне UTF?
Нашёл пример:
Visual Basic
1
2
3
4
5
6
Format(Time + (a.Bias / 60) / 24, "hh:mm")
'Сделал его ввиде
'UTF это передаваемый часовой пояс
    Dim af As Long
    af = (a.Bias / 60) + UTF
     utfzona = Format(Time + af / 24, "hh:mm")
Тоесть код ещё недоработанный чутка так как если модуль числа будет
положительный и UTF будет положительное получится ляп.
Но в моём случае если прибавить просто (a.Bias / 60) то получится время нулевого пояса.
В общем всё работало до 12 часов ночи, я уже обрадовался, портянку другого кода накатал
и тут часы пошли в обратную сторону О_О
Суть вопроса в чём как получить время в формате UTF нулевого пояса и оперировать с ним применяя различные пояса так чтоб не глючило от времени суток?
Можно конечно часы разобрать и дату по частям и с помощью разных условий пересобирать, но мне кажется есть способ проще
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2013, 18:34
Ответы с готовыми решениями:

Найти файл по имени в visual basic если он создан в формате utf-8
Здравствуйте. Такая ситуация – создается отчет из программы sppa t-3000 в формате utf-8 как файл...

Как получить текущее время в формате Long ?
Как получить текущее время в формате Long, аналогично функции time в C

Сравнить две String в формате UTF-8
Уважаемые форумчане. в соседней теме никто не ответил, потому попробую задать вопрос в новой теме....

Как посылать запрос к БД в формате UTF-8?
Приветствую! При заполнении формы в MySQL русские буквы отображаются кракозябрами. База данных и...

6
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 571
22.09.2013, 08:36  [ТС] 2
Накопал в интернете и чутка переделал:
Кликните здесь для просмотра всего текста
Visual Basic
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
Option Explicit
Option Compare Text
 
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
 
Private Type TIME_ZONE_INFORMATION
    Bias As Long
    StandardName(0 To 31) As Integer
    StandardDate As SYSTEMTIME
    StandardBias As Long
    DaylightName(0 To 31) As Integer
    DaylightDate As SYSTEMTIME
    DaylightBias As Long
End Type
 
Public Enum TIME_ZONE
    TIME_ZONE_ID_INVALID = 0
    TIME_ZONE_STANDARD = 1
    TIME_ZONE_DAYLIGHT = 2
End Enum
 
Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
 
'Принимает UTF значение пояса с обратным модулем к примеру Гаваи -10 вместо 10 владивосток 11 вместо -11
'так же минуты
Function ConvertLocalToGMT(Optional utfHas As Integer, Optional utfMin As Integer) As Date
    Dim T As Date
    Dim TZI As TIME_ZONE_INFORMATION
    Dim DST As TIME_ZONE
    Dim GMT As Date
    T = Now
    DST = GetTimeZoneInformation(TZI)
    GMT = T + TimeSerial(0, TZI.Bias, 0)
    If utfHas = 0 Then
        utfHas = 0
    End If
    If utfMin = 0 Then
        utfMin = 0
    End If
    GMT = GMT + TimeSerial(utfHas, utfMin, 0)
    ConvertLocalToGMT = GMT
End Function

Не думал что настолько простое может оказаться настолько сложным

Добавлено через 2 часа 41 минуту
Этот код внутри класса
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Type utcvr
    gor As String
    utc As Byte
End Type
 
Public Function UTCmass()
    Dim mzon() As utcvr
    mzon(0).gor = "(UTC-12:00) Ëèíèÿ ïåðåìåíû äàò"
    mzon(0).utc = -12
    ReDim Preserve mzon(1)
    mzon(1).gor = "(UTC-11:00) Âðåìÿ â ôîðìàòå UTC -11"
    mzon(1).utc = -11
    UTCmass = mzon
End Function
Как вывести этот массив из класса?
До этого простые массивы выводил, а этот из за того что использует пользовательский тип не получается не как.
Пробовал тип объявить как Public но компилятор ругается сразу же на него, а если Private то ругается на попытку
вывести из функции.
2
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
22.09.2013, 09:35 3
Цитата Сообщение от radlif Посмотреть сообщение
Как вывести этот массив из класса?
До этого простые массивы выводил, а этот из за того что использует пользовательский тип не получается не как.
А так ли уж ЗДЕСЬ нужен пользовательский тип-то?? Всего-то два параметра !! Переделай в mzon(2) As String и сохраняй 2-й параметр через Str(), раз получается вывести простой (ведь тебе не десятки тысяч перебирать - можно и потерять немного времени...)
0
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 571
22.09.2013, 10:36  [ТС] 4
Я думал так, но мне не нравится много строковых функций пихать в класс)
Так же на выходе придётся val пихать и всё это дело в цикле крутить.
К тому же на будущее пригодится
Подожду мож кто из спецов что подскажет...
Во и ещё вопрос в тему)
В php есть такой способ заносить большие объёмы текста
в переменную:
PHP
1
2
3
4
5
6
7
$strtext = TEXT
"
Строка 1
Строка 2
Строка 3
"
_TEXT
После можно занести функцией в цикле построчно в 2-ух мерный массив
и выводить результат таким способом
print $mass[0][1]
print $mass[0][2]
Есть в vb что нибудь наподобие TEXT ?)

Добавлено через 37 минут
У меня 102 часовых пояса, по моему бред их заносить так:
Visual Basic
1
2
3
4
5
    Dim mzon() As String
    ReDim Preserve mzon(0, 0)
    mzon(0, 0) = "(UTC-12:00) Ëèíèÿ ïåðåìåíû äàò"
    ReDim Preserve mzon(0, 1)
    mzon(0, 1) = "-12"
0
es geht mir gut
11271 / 4753 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
22.09.2013, 13:49 5
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Не знаю, правильно ли я понял, но чтобы не связываться с текстовым файлом можно сделать так, как показано в коде ниже.
И еще, можно код запихнуть не в модуль класса, а в простой модуль.
Это, конечно, не объект, но всё-таки не нужный постоянно код не будет маячить перед глазами.
Оформить в виде процедуры, и передавать туда массив пользовательского типа по ссылке

Примерный код модуля
Visual Basic
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
Option Explicit
 
Public Type utcvr
    gor As String
    utc As Integer
End Type
 
Public Sub UTCmass(ByRef mzon() As utcvr)
     ReDim mzon(1 To 12) As utcvr
     Dim i As Integer, temp
     temp = Split(sText, vbCrLf)
     For i = LBound(mzon) To UBound(mzon)
             mzon(i).gor = temp(i - 1)
             mzon(i).utc = CInt(Mid(Trim(temp(i - 1)), 5, InStr(1, Trim(temp(i - 1)), ":") - InStr(1, Trim(temp(i - 1)), "C") - 1))
     Next i
End Sub
 
Private Function sText() As String
    Dim s As String
    s = "(UTC-12:00) Линия перемены дат" & vbCrLf & _
        "(UTC-11:00) Время в формате UTC -11" & vbCrLf & _
        "(UTC-10:00) Время в формате UTC -10" & vbCrLf & _
        "(UTC-9:00) Время в формате UTC -9" & vbCrLf & _
        "(UTC-8:00) Время в формате UTC -8" & vbCrLf & _
        "(UTC-7:00) Время в формате UTC -7" & vbCrLf & _
        "(UTC-6:00) Время в формате UTC -6" & vbCrLf & _
        "(UTC-5:00) Время в формате UTC -5" & vbCrLf & _
        "(UTC-4:00) Время в формате UTC -4" & vbCrLf & _
        "(UTC-3:00) Время в формате UTC -3" & vbCrLf & _
        "(UTC-2:00) Время в формате UTC -2" & vbCrLf & _
        "(UTC-1:00) Время в формате UTC -1"
        sText = s
End Function
Примерный код формы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit
 
 
Private Sub Command1_Click()
 
    Dim ut() As utcvr, i As Integer
    
    Call UTCmass(ut)
    
    For i = LBound(ut) To UBound(ut)
        Print ut(i).gor, ut(i).utc
    Next i
    
End Sub

И вот что получится в результате:
Миниатюры
Время в формате UTF  
0
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 571
22.09.2013, 13:59  [ТС] 6
Поздно я уже всё запихал в класс виде статичного массива так как известно кол-во элементов:
Visual Basic
1
2
    mzon(0, 0) = "(UTC-12:00) Линия перемены дат"
    mzon(0, 1) = "-720"
Кст в функцию конвертирования лучше сделать так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function ConvertLocalToGMT(Optional utcHas As Integer) As Date
    Dim T As Date
    Dim TZI As TIME_ZONE_INFORMATION
    Dim DST As TIME_ZONE
    Dim GMT As Date
    T = Now
    DST = GetTimeZoneInformation(TZI)
    
    GMT = T + TimeSerial(0, TZI.Bias, 0)
    If utcHas = 0 Then
        utcHas = 0
    End If
    
    GMT = GMT + TimeSerial(0, utcHas, 0)
    ConvertLocalToGMT = GMT
End Function
И передавать разницу в минутах, меньше мороки с нестандартными
поясами типа 10:30.
Сейчас ищу элемент типа комбобокса только чтоб выводил строки на полную длину
а не как комбобокс делает список только по своей ширине.
0
Заблокирован
22.09.2013, 15:10 7
Цитата Сообщение от radlif Посмотреть сообщение
заносить большие объёмы текста в переменную
Visual Basic
1
a = Array("Ñòðîêà 1", "Ñòðîêà 2", "Ñòðîêà 3")
Ещё есть Split и запись строки кода с переносом на следующую строку символом _.
0
22.09.2013, 15:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2013, 15:10
Помогаю со студенческими работами здесь

Как открыть файл в richtextbox в формате UTF-8
Сделал программу которая открывает текстовые файлы.Всё работает просто я не могу нигде найти как...

Вывод массива в файл в unix формате и utf-8 кодировке
Собственно, как написать сию функцию? Чем пользоваться? Особенно интересует часть где unix формат.

В сообщении может содержаться время в формате чч:мм. Увеличите время на n минут
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются...

Время. Дано количество секунд. Вычислить время в формате часы/минуты/секунды.
Написать программу, которая требует от пользователя ввести к- секунду и чтобы программа считала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru