Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168

Как узнать текущее московское время?

10.04.2014, 13:37. Показов 7586. Ответов 9

Студворк — интернет-сервис помощи студентам
Как узнать текущее московское время?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2014, 13:37
Ответы с готовыми решениями:

Как узнать какое из модальных окон текущее
Если в проекте много модальных окон и они могут вызываться друг из друга в любом порядке, как узнать какое из окон верхнее в данный момент?

как узнать текущее время
Помогите пожалуйста как узнать текущее время dateTimePicker1.валуе показывает нормально но только показывает время создания ...

Как узнать текущее состояние процесса
Здравствуйте уважаемые эксперты. Собственно вопрос стоит в названии темы, как можно узнать текущее состояние процесса, т.е. находится он в...

9
49 / 49 / 13
Регистрация: 29.06.2011
Сообщений: 174
10.04.2014, 16:43
как то так: http://msdn.microsoft.com/ru-r... e.now.aspx
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
10.04.2014, 16:50
Лучший ответ Сообщение было отмечено Hsac как решение

Решение

Hsac, я бы сделал так:
C#
1
2
TimeZoneInfo moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
DateTime moscowDateTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, moscowTimeZone);
2
0 / 0 / 0
Регистрация: 30.10.2018
Сообщений: 24
30.12.2018, 11:33
А если время не обновляется ?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
30.12.2018, 13:13
PebloSasio, в таком случае можно использовать NTP для получения текущего времени
C#
1
2
3
4
5
6
7
8
9
// Получаем UTC время от одного из NTP серверов
string[] ntpServers = {"time-a.nist.gov", "time.windows.com", "pool.ntp.org"};
Task<DateTime>[] ntpTasks = ntpServers.Select(srv => NtpClient.GetNetworkTimeUtcAsync(srv)).ToArray();
int idx = Task.WaitAny(ntpTasks);
DateTime utcNow = ntpTasks[idx].Result;
 
// Преобразуем UTC время в Московское
TimeZoneInfo moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
DateTime moscowDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, moscowTimeZone);
NtpClient
C#
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
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
 
public static class NtpClient
{
    public static async Task<DateTime> GetNetworkTimeUtcAsync(string ntpServer)
    {
        // NTP message size - 16 bytes of the digest (RFC 2030)
        var ntpData = new byte[48];
     
        //Setting the Leap Indicator, Version Number and Mode values
        ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)
     
        var addresses = (await Dns.GetHostEntryAsync(ntpServer)).AddressList;
     
        // NTP работает через UDP и использует порт 123
        var ipEndPoint = new IPEndPoint(addresses[0], 123);
        using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
        {
            await socket.ConnectAsync(ipEndPoint);
     
            //Stops code hang if NTP is blocked
            socket.ReceiveTimeout = 3000;
            
            ArraySegment<byte> segment = new ArraySegment<byte>(ntpData);
            await socket.SendAsync(segment, SocketFlags.None);
            await socket.ReceiveAsync(segment, SocketFlags.None);
        }
     
        //Offset to get to the "Transmit Timestamp" field (time at which the reply 
        //departed the server for the client, in 64-bit timestamp format."
        const byte serverReplyTime = 40;
     
        // Get the seconds part
        ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);
     
        // Get the seconds fraction
        ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);
     
        //Convert From big-endian to little-endian
        intPart = SwapEndianness(intPart);
        fractPart = SwapEndianness(fractPart);
     
        var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
        return (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);
    }
     
    // Convert From big-endian to little-endian
    static uint SwapEndianness(ulong x)
    {
        return (uint)(((x & 0x000000ff) << 24) +
                       ((x & 0x0000ff00) << 8) +
                       ((x & 0x00ff0000) >> 8) +
                       ((x & 0xff000000) >> 24));
    }
}
1
0 / 0 / 0
Регистрация: 30.10.2018
Сообщений: 24
30.12.2018, 14:01
OwenGlendower, А если говорит что Task не существует в текущем контексте ?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
30.12.2018, 14:04
PebloSasio, нужно добавить using System.Threading.Tasks;
0
0 / 0 / 0
Регистрация: 30.10.2018
Сообщений: 24
30.12.2018, 14:31
Цитата Сообщение от OwenGlendower Посмотреть сообщение
PebloSasio, нужно добавить using System.Threading.Tasks;
Теперь выдаёт ошибку
System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Globalization;
using System.IO;
 
namespace ConsoleApp3
{
    class Program
    {
        public string[] ntpServers = { "time-a.nist.gov", "time.windows.com", "pool.ntp.org" };
        public Task<DateTime>[] ntpTasks = Program.Instance.ntpServers.Select(srv => NtpClient.GetNetworkTimeUtcAsync(srv)).ToArray();
        public int idx = Task.WaitAny(Program.Instance.ntpTasks);
        public DateTime utcNow = Program.Instance.ntpTasks[Program.Instance.idx].Result;
        public TimeZoneInfo moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
        public DateTime moscowDateTime = TimeZoneInfo.ConvertTimeFromUtc(Program.Instance.utcNow, Program.Instance.moscowTimeZone);
        static void Main(string[] args)
        {
            Program.Instance = null;
            Console.WriteLine("Time: " + Program.Instance.moscowDateTime.ToString("G"));
            Thread.Sleep(60000);
            Console.WriteLine("Time: " + Program.Instance.moscowDateTime.ToString("G"));
            Thread.Sleep(60000);
            Console.WriteLine("Time: " + Program.Instance.moscowDateTime.ToString("G"));
            Thread.Sleep(60000);
            Console.WriteLine("Time: " + Program.Instance.moscowDateTime.ToString("G"));
            Thread.Sleep(60000);
        }
        public static Program Instance;
    }
}
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
30.12.2018, 15:43
PebloSasio, неудивительно. Код же бредовый. Вот готовый рабочий код для консоли:
C#
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Time: {0:G}", GetMoscowTime());
            Thread.Sleep(60000);
            Console.WriteLine("Time: {0:G}", GetMoscowTime());
            Thread.Sleep(60000);
            Console.WriteLine("Time: {0:G}", GetMoscowTime());
            Thread.Sleep(60000);
            Console.WriteLine("Time: {0:G}", GetMoscowTime());
            Thread.Sleep(60000);
        }
 
        static DateTime GetMoscowTime()
        {
            // Получаем UTC время от одного из NTP серверов
            string[] ntpServers = { "time-a.nist.gov", "time.windows.com", "pool.ntp.org" };
            Task<DateTime>[] ntpTasks = ntpServers.Select(srv => NtpClient.GetNetworkTimeUtcAsync(srv)).ToArray();
            int idx = Task.WaitAny(ntpTasks);
            DateTime utcNow = ntpTasks[idx].Result;
 
            // Преобразуем UTC время в Московское
            TimeZoneInfo moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
            return TimeZoneInfo.ConvertTimeFromUtc(utcNow, moscowTimeZone);
        }
    }
 
    public static class NtpClient
    {
        public static async Task<DateTime> GetNetworkTimeUtcAsync(string ntpServer)
        {
            // NTP message size - 16 bytes of the digest (RFC 2030)
            var ntpData = new byte[48];
 
            //Setting the Leap Indicator, Version Number and Mode values
            ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)
 
            var addresses = (await Dns.GetHostEntryAsync(ntpServer)).AddressList;
 
            // NTP работает через UDP и использует порт 123
            var ipEndPoint = new IPEndPoint(addresses[0], 123);
            using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
            {
                await socket.ConnectAsync(ipEndPoint);
 
                //Stops code hang if NTP is blocked
                socket.ReceiveTimeout = 3000;
 
                ArraySegment<byte> segment = new ArraySegment<byte>(ntpData);
                await socket.SendAsync(segment, SocketFlags.None);
                await socket.ReceiveAsync(segment, SocketFlags.None);
            }
 
            //Offset to get to the "Transmit Timestamp" field (time at which the reply 
            //departed the server for the client, in 64-bit timestamp format."
            const byte serverReplyTime = 40;
 
            // Get the seconds part
            ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);
 
            // Get the seconds fraction
            ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);
 
            //Convert From big-endian to little-endian
            intPart = SwapEndianness(intPart);
            fractPart = SwapEndianness(fractPart);
 
            var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
            return (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseconds);
        }
 
        // Convert From big-endian to little-endian
        static uint SwapEndianness(ulong x)
        {
            return (uint)(((x & 0x000000ff) << 24) +
                           ((x & 0x0000ff00) << 8) +
                           ((x & 0x00ff0000) >> 8) +
                           ((x & 0xff000000) >> 24));
        }
    }
}
1
0 / 0 / 0
Регистрация: 30.10.2018
Сообщений: 24
30.12.2018, 19:15
Сяб,бротан <3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.12.2018, 19:15
Помогаю со студенческими работами здесь

Создайте командный файл, который спрашивает: «Вы хотите узнать текущее время или текущую дату?» – и в зависимости от ответа выдает на экран текущее вр
Здраствуйте очень сильно нужна помощь в написании батников кто может помогите пожалуйста!!! 1 Создайте командный файл, который...

Узнать текущее время
Узнаем время: StrTime:=TimeToStr(Time); Выскакивает ошибка: Unit2.pas(165): E2250 There is no overloaded version of 'TimeToStr'...

Узнать текущее время
Помогите разобраться Даже не знаю как объяснить, я импортировал модуль datetime, чтобы с помощью него узнавать дату и время. Дату он...

Как получить текущее Текущее Unix epoch время в милисекундах?
Хочу получить через эксель выписку егрюл egrul.nalog.ru Общий порядок такой: 1) Отправляю ПОСТ запрос на адрес https://egrul.nalog.ru/ ...

Узнать текущее время суток
нужно узнать текущее время и соответствующим образом поздороваться с пользователем. как это(узнать время) сделать цивилизованным(не...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru