Работа с датой и временем
Для работы с датой и временем язык C# предусматривает структуру DateTime, описанную в пространстве имен System.
Свойства структуры DateTime
Структура DateTime содержит следующие свойства:
Date – собственно структура типа DateTime;
DayOfWeek – день недели – является членом перечисления DayOfWeek:
Monday – понедельник,
Tuesday – вторник,
Wednesday – среда,
Thursday – четверг,
Friday – пятница,
Saturday – суббота,
Sunday – воскресенье.
DayOfYear – целочисленное значение дня заданного года от 1 до 366.
Hour – количество часов заданного дня от 0 до 23;
Kind – представляет собой значение, указывающее, какое время указано текущим экземпляром структуры DateTime, является членом перечисления Kind:
Local – местное время
Utc – время представлено стандартом UTC.
Unspecified – время не определено ни как местное, ни как UTC.
Millisecond – количество миллисекунд заданной даты от 0 до 999.
Minute – количество минут заданной даты от 0 до 59.
Month – значение месяца заданной даты от 1 до 12.
Second – количество секунд заданной даты от 0 до 59.
Year – год заданной даты от 0001 до 9999.
TimeOfDay – время дня для заданной даты (с точностью до 100 наносекунд).
Ticks – число 100-наносекундных тактов в формате Int64 начиная с 00:00:00 1 января 0001 года.
Кроме того, структура DateTime содержит статические свойства и поля:
Now – представляет собой свойство DateTime, содержащее текущую дату и время данного компьютера в формате местного времени.
UtcNow - представляет собой свойство DateTime, содержащее текущую дату и время данного компьютера в формате UTC.
Today – представляет собой текущую дату.
MinValue – наименьшее значение типа DateTime.
MaxValue – наибольшее значение типа DateTime.
IsLeapYear(Int32 year) – возвращает логическое значение true если переданный год является високосным и false в противном случае.
DaysInMonth(Int32 year, Int32 month) – возвращает количество дней в указанном месяце указанного года.
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(DateTime.MinValue + " - "
+ DateTime.MaxValue);
Console.WriteLine(DateTime.MinValue.Ticks + " - "
+ DateTime.MaxValue.Ticks);
Console.ReadKey();
}
}
}
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("IsLeapYear(2016) = "
+ DateTime.IsLeapYear(2016));
Console.WriteLine("DaysInMonth(2016, 2) = "
+ DateTime.DaysInMonth(2016, 2));
Console.ReadKey();
}
}
}
Конструкторы структуры DateTime
Структура DateTime содержит ряд конструкторов, позволяющих инициализировать объект. Наиболее часто используемые из них:
Указанной датой - DateTime(год, месяц, день);
Указанной датой и временем – DateTime(год, месяц, день, часы, минуты, секунды);
Указанным 64-разрядным количеством Ticks – DateTime(Ticks).
Рассмотрим пример инициализации даты и получения ее отдельных свойств.
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt = new DateTime(1978, 6, 8, 3, 5, 0);
Console.WriteLine("Set date: " + dt.Day + "." + dt.Month + "."
+ dt.Year + " " + dt.Hour + ":" + dt.Minute + ":" + dt.Second);
dt = DateTime.Now;
Console.WriteLine("Now: " + dt);
Console.WriteLine("Date: " + dt.Date);
Console.WriteLine("TimeOfDay: " + dt.TimeOfDay);
Console.WriteLine("Milliseconds: " + dt.Millisecond);
Console.WriteLine("DayOfWeek: " + dt.DayOfWeek);
Console.WriteLine("DayOfYear: " + dt.DayOfYear);
Console.WriteLine("Ticks: " + dt.Ticks);
Console.ReadKey();
}
}
}
При попытке инициализации объекта DateTime недопустимыми значениями возникает исключение:
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt;
try
{
dt = new DateTime(2016, 2, 31); // 31 февраля
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
Ввод данных структуры DateTime
Для ввода даты и времени чаще всего используются статические методы Parse() и TryParse() структуры DateTime.
Метод Parse() в качестве аргумента принимает строку в одном из допустимых форматов для преобразования ее к объекту DateTime, который является возвращаемым значением функции. Если строку не удается корректно преобразовать в объект DateTime, возникает исключение.
Метод TryParse() принимает в качестве аргументов строку, которую необходимо преобразовать к объекту типа DateTime, а также переменную типа DateTime, обозначенную ключевым словом out, в которую необходимо сохранить преобразованную строку. Метод TryParse() является защищенным, и в случае невозможности корректного преобразования строки к формату DateTime, возвращает значение, равное 0, что соответствует дате DateTime.MiValue.
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt;
dt = DateTime.Parse(Console.ReadLine());
Console.WriteLine(dt);
DateTime.TryParse(Console.ReadLine(), out dt);
Console.WriteLine(dt);
Console.ReadKey();
}
}
}
Для того чтобы узнать поддерживаемые системой форматы ввода даты и времени можно воспользоваться методом GetDateTimeFormats(), который преобразует значение объекта DateTime во все строковые представления, поддерживаемые стандартным форматом даты и времени.
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt = DateTime.Now;
string[] formats = dt.GetDateTimeFormats();
Console.WriteLine("Количество поддерживаемых форматов: "
ormats.Length);
foreach (string format in formats)
Console.WriteLine(format);
Console.ReadKey();
}
}
}
Вывод данных структуры DateTime
Особого внимания заслуживает возможность форматированного вывода даты и времени. Для этого чаще всего используется перегруженный метод ToString() класса Object, который в качестве аргумента может принимать строку формата для вывода даты и времени.
Обозначение Назначение Варианты использования
y год y
yy
yyyy
M месяц M
MM
MMM
MMMM
d день d
dd
ddd
dddd
h
H час (12-часовой)
час(24-часовой) h
hh
H
HH
m минута m
mm
s секунда s
ss
f тик f
ff
fff
ffff
fffff
ffffff
fffffff
z временная зона z
zz
zzz
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("y yy yyyy"));
Console.WriteLine(dt.ToString("M MM MMM MMMM"));
Console.WriteLine(dt.ToString("d dd ddd dddd"));
Console.WriteLine(dt.ToString("h hh H HH"));
Console.WriteLine(dt.ToString("m mm"));
Console.WriteLine(dt.ToString("s ss"));
Console.WriteLine(dt.ToString("f ff fff ffff fffff
ffffff fffffff"));
Console.WriteLine(dt.ToString("z zz zzzz"));
Console.WriteLine(dt.ToString("dd-MM-yyyy
HH:mm:ss.fffffff zzzz"));
Console.ReadKey();
}
}
}
Изменение данных структуры DateTime
Для изменения даты и времени относительно указанного значения можно воспользоваться следующими методами. Все эти методы возвращают новый объект DateTime и в качестве аргумента могут принимать как положительное, так и отрицательное значение.
AddDays(Double) - добавляет заданное число дней (полных и неполных) к указанному значению.
AddMonths(Int32) - добавляет заданное число месяцев к указанному значению.
AddYears(Int32) - добавляет заданное число лет к указанному значению.
AddHours(Double) - добавляет заданное число часов (полных и неполных) к указанному значению.
AddMinutes(Double) - добавляет заданное число минут (полных и неполных) к указанному значению.
AddSeconds(Double) - добавляет заданное число секунд (полных и неполных) к указанному значению.
AddMilliseconds(Double) - добавляет заданное число миллисекунд (полных и неполных) к указанному значению.
AddTicks(Int64) - добавляет заданное число 100-наносекундных тиков к указанному значению.
Add(TimeSpan) - добавляет значение TimeSpan к указанному значению DateTime. Структура TimeSpan используется для представления интервала времени, которая может быть проинициализирована следующим образом:
TimeSpan(часы,?минуты,?секунды)
TimeSpan(дни, часы,?минуты,?секунды)
TimeSpan(дни, часы,?минуты,?секунды, миллисекунды)
TimeSpan(тики)
В примере ниже вторая строка выводится через 5 секунд после первой.
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt);
dt = dt.AddSeconds(5);
while (dt > DateTime.Now) ;
Console.WriteLine(DateTime.Now);
Console.ReadKey();
}
}
}
Кроме того, для изменения данных могут использоваться перегруженные операторы
+ - складывает значение объекта DateTime и временной интервал TimeSpan;
- – вычитает значение объекта DateTime или TimeSpan из значения объекта DateTime.
10dt = dt + new TimeSpan(0,0,5);
10dt += new TimeSpan(0,0,5);
Сравнение данных структуры DateTime
Для сравнения объектов DateTime могут использоваться
Метод CompareTo(DateTime) – сравнивает указанное значение объекта с переданным в качестве аргумента. Возвращаемое значение меньше нуля если указанная дата раньше переданной в качестве аргумента, ноль если даты равны и больше нуля если указанная дата позже переданной в качестве аргумента.
Статический метод Compare(DateTime, DateTime) – сравнивает два переданных объекта DateTime и формирует возвращаемое значение аналогично предыдущему методу.
Метод Equals(DateTime) и статический метод Equals(DateTime, DateTime) – проверяют два объекта DateTime на равенство и возвращают логическое значение true (в случае равенства) или false (в случае неравенства).
Операторы сравнения, возвращающие логическое значение
> - больше;
< - меньше;
>= - больше или равно;
<= - меньше или равно;
== - равно;
!= - неравно
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DateTime dt1 = DateTime.Now;
DateTime dt2 = dt1 - new TimeSpan(0, 0, 5);
Console.WriteLine(dt1 + " CompareTo(" + dt2 + ") - "
+ dt1.CompareTo(dt2));
Console.WriteLine(dt1 + " Equals(" + dt2 + ") - "
+ dt1.Equals(dt2));
Console.WriteLine(dt1 + " == " + dt2 + " - " + (dt1 == dt2));
Console.WriteLine(dt1 + " != " + dt2 + " - " + (dt1 != dt2));
Console.WriteLine(dt1 + " < " + dt2 + " - " + (dt1 < dt2));
Console.WriteLine(dt1 + " >= " + dt2 + " - " + (dt1 >= dt2));
Console.ReadKey();
}
}
}
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.