Перейти к содержимому

Как datetime преобразовать в int

  • автор:

Работа с датами и временем

Для работы с датами и временем в .NET предназначена структура DateTime . Она представляет дату и время от 00:00:00 1 января 0001 года до 23:59:59 31 декабря 9999 года.

Для создания нового объекта DateTime также можно использовать конструктор. Пустой конструктор создает начальную дату:

DateTime dateTime = new DateTime(); Console.WriteLine(dateTime); // 01.01.0001 0:00:00

То есть мы получим минимально возможное значение, которое также можно получить следующим образом:

Console.WriteLine(DateTime.MinValue);

Чтобы задать конкретную дату, нужно использовать один из конструкторов, принимающих параметры:

DateTime date1 = new DateTime(2015, 7, 20); // год - месяц - день Console.WriteLine(date1); // 20.07.2015 0:00:00
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // год - месяц - день - час - минута - секунда Console.WriteLine(date1); // 20.07.2015 18:30:25

Если необходимо получить текущую время и дату, то можно использовать ряд свойств DateTime:

Console.WriteLine(DateTime.Now); Console.WriteLine(DateTime.UtcNow); Console.WriteLine(DateTime.Today);
20.07.2015 11:43:33 20.07.2015 8:43:33 20.07.2015 0:00:00

Свойство DateTime.Now берет текущую дату и время компьютера, DateTime.UtcNow — дата и время относительно времени по Гринвичу (GMT) и DateTime.Today — только текущая дата.

При работе с датами надо учитывать, что по умолчанию для представления дат применяется григорианский календарь. Но что будет, если мы захотим получить день недели для 5 октября 1582 года:

DateTime someDate = new DateTime(1582, 10, 5); Console.WriteLine(someDate.DayOfWeek);

Консоль высветит значение Tuesday, то есть вторник. Однако, как может быть известно из истории, впервые переход с юлианского календаря на григорианский состоялся в октябре 1582 года. Тогда после даты 4 октября (четверг) (еще по юлианскому календарю) сразу перешли к 15 октября (пятница)(уже по григорианскому календарю). Таким образом, фактически выкинули 10 дней. То есть после 4 октября шло 15 октября.

В большинстве случаев данный факт вряд ли как-то повлияет на вычисления, однако при работе с очень давними датами данный аспект следует учитывать.

Операции с DateTime

Основные операции со структурой DateTime связаны со сложением или вычитанием дат. Например, надо к некоторой дате прибавить или, наоборот, отнять несколько дней.

Для добавления дат используется ряд методов:

  • Add(TimeSpan value) : добавляет к дате значение TimeSpan
  • AddDays(double value) : добавляет к текущей дате несколько дней
  • AddHours(double value) : добавляет к текущей дате несколько часов
  • AddMinutes(double value) : добавляет к текущей дате несколько минут
  • AddMonths(int value) : добавляет к текущей дате несколько месяцев
  • AddYears(int value) : добавляет к текущей дате несколько лет

Например, добавим к некоторой дате 3 часа:

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 Console.WriteLine(date1.AddHours(3)); // 20.07.2015 21:30:25

Для вычитания дат используется метод Subtract(DateTime date) :

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 DateTime date2 = new DateTime(2015, 7, 20, 15, 30, 25); // 20.07.2015 15:30:25 Console.WriteLine(date1.Subtract(date2)); // 03:00:00

Здесь даты различаются на три часа, поэтому результатом будет дата «03:00:00».

Метод Substract не имеет возможностей для отдельного вычитания дней, часов и так далее. Но это и не надо, так как мы можем передавать в метод AddDays() и другие методы добавления отрицательные значения:

// вычтем три часа DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25

Кроме операций сложения и вычитания еще есть ряд методов форматирования дат:

DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); Console.WriteLine(date1.ToLocalTime()); // 20.07.2015 21:30:25 Console.WriteLine(date1.ToUniversalTime()); // 20.07.2015 15:30:25 Console.WriteLine(date1.ToLongDateString()); // 20 июля 2015 г. Console.WriteLine(date1.ToShortDateString()); // 20.07.2015 Console.WriteLine(date1.ToLongTimeString()); // 18:30:25 Console.WriteLine(date1.ToShortTimeString()); // 18:30

Метод ToLocalTime() преобразует время UTC в локальное время, добавляя смещение относительно времени по Гринвичу. Метод ToUniversalTime() , наоборот, преобразует локальное время во время UTC, то есть вычитает смещение относительно времени по Гринвичу. Остальные методы преобразуют дату к определенному формату.

Как преобразовать значения ключей из int в datetime?

Не могу понять почему преобразовываются не все значения в словаре.

import datetime dat = today = datetime.date.today() for i in dat: if isinstance(i, datetime.date): # условие сравнения классов continue else : tod = today + datetime.timedelta(days=i) dat[tod] = dat.pop(i) print(dat)
  • Вопрос задан более двух лет назад
  • 178 просмотров

1 комментарий

Простой 1 комментарий

DateTime to int c#

Вы можете перевести текущее время в секунды или миллисекунды. Общепринятая дата отсчёта при этом является 00:00:00 01.01.1970 по UTC.

DateTime dt = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now); DateTime dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); TimeSpan tsInterval = dt.Subtract(dt1970); Int32 iSeconds = Convert.ToInt32(tsInterval .TotalSeconds); Int64 iMilliseconds = Convert.ToInt64(tsInterval .TotalMilliseconds); 

Отслеживать
25.1k 4 4 золотых знака 45 45 серебряных знаков 81 81 бронзовый знак
ответ дан 7 апр 2015 в 14:04
Пётр Сокольников Пётр Сокольников
21 3 3 бронзовых знака
Отслеживать
ответ дан 15 дек 2011 в 22:21
612 4 4 серебряных знака 12 12 бронзовых знаков

Если устраивает точность до секунд и диапазон дат +- примерно 68 лет от 2017, то работает это решение. По необходимости можно двигать диапазон дат, меняя в коде цифру 2017 на требуемую. На всякий случай обращаю внимание, что ConvertDateTimeToInt32 по-хорошему нуждается в некой логике обработки ошибок. Сейчас при выходе даты за границу рабочего диапазона, вернет неверное значение без генерации исключения.

using System; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < int now = ConvertDateTimeToInt32(DateTime.Now); Console.WriteLine("Сейчас " + ConvertInt32ToDateTime(now)); Console.WriteLine("Диапазон от " + ConvertInt32ToDateTime(int.MinValue)); Console.WriteLine("Диапазон до " + ConvertInt32ToDateTime(int.MaxValue)); int error = ConvertDateTimeToInt32(DateTime.MaxValue); Console.WriteLine("Error: вместо " + DateTime.MaxValue + " выдает " + ConvertInt32ToDateTime(error)); Console.ReadLine(); >public static int ConvertDateTimeToInt32(DateTime dt) < return (int)(dt - new DateTime(2017, 1, 1)).TotalSeconds; >public static DateTime ConvertInt32ToDateTime(int i) < return new DateTime(2017, 1, 1).AddSeconds(i); >> > 

Отслеживать
ответ дан 14 окт 2017 в 10:30
11 2 2 бронзовых знака

Нельзя преобразовать в данный тип. Можно только в String. Как ты собираешься преобразовывать точки в Int32? Это невозможно.

Отслеживать
ответ дан 15 дек 2011 в 15:15
690 7 7 золотых знаков 21 21 серебряный знак 51 51 бронзовый знак

Я уже решил вопрос, это делается вот так: TimeSpan t = (new DateTime.Now — new DateTime(1970, 1, 1, 0, 0, 0)); int data = (int)(t.TotalDays * 86400); И поверь это возможно 🙂

Как перевести дату время в значение типа int? — страница 2

Я не знаю C#, но догадываюсь, что его DateTime — это двоичные данные. Тогда я бы почитал, что оно представляет и сделал бы простую конвертацию. В mql datetime, как известно, это количество секунд с 01.01.1970. Дата файла в винде, например, это количество единиц по 100 нс с 01.01.1601. Так что я перевел единицы в секунды и вычел разницу в секундах между 1601 и 1970 годами, учтя количество високосных лет.

Igor Makanu 2020.03.01 12:13 #13
Edgar Akhmadeev :
Я не знаю C#, но догадываюсь, что его DateTime — это двоичные данные.

в C# за что ни возьмись, все обьекты, включая и DateTime

вот в VS2019 проверил с выводом:

namespace ConsoleApp1 < class Program < static void Main(string[] args) < Console.Write("t keyword">int t = Convert.ToInt32(Console.ReadLine()); TimeSpan ts = TimeSpan.FromSeconds(t); DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) + ts; Console.WriteLine(dt.ToLongDateString() + " : " + dt.ToLongTimeString()); Console.ReadKey(); > > >

код MQL чтобы узнать время в int ))

void OnStart() < int t =(int)TimeLocal(); Print("t comment">//t = 1583078979 >

Sergey Zhilinskiy 2020.03.01 16:36 #14
int unixTime = ( int ) ( DateTime . UtcNow — new DateTime ( 1970 , 1 , 1 ) ) . TotalSeconds ;
ROMAN KIVERIN 2020.03.02 01:34 #15
Igor Makanu :

в C# за что ни возьмись, все обьекты, включая и DateTime

вот в VS2019 проверил с выводом:

код MQL чтобы узнать время в int ))

Sergey Zhilinskiy :
int unixTime = ( int ) ( DateTime . UtcNow — new DateTime ( 1970 , 1 , 1 ) ) . TotalSeconds ;

Спасибо дорогие друзья. Премного благодарен. Без Вашей помощи никак. Ждём Тестера. 🙂

Edgar Akhmadeev :
Я не знаю C#, но догадываюсь, что его DateTime — это двоичные данные. Тогда я бы почитал, что оно представляет и сделал бы простую конвертацию. В mql datetime, как известно, это количество секунд с 01.01.1970. Дата файла в винде, например, это количество единиц по 100 нс с 01.01.1601. Так что я перевел единицы в секунды и вычел разницу в секундах между 1601 и 1970 годами, учтя количество високосных лет.

Да я тоже толком не разбираюсь. Так пальцем тыкаю наугад по клавиатуре. Спасибо есть друзья, которые могут вовремя помочь.

Всем Спасибо за уделённое внимание. Всего, всего, всего Вам самого,самого.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *