TimeSpan Структура

Определение

Представляет интервал времени.

public value class TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IFormattable
public value class TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, ISpanFormattable
public value class TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IParsable<TimeSpan>, ISpanFormattable, ISpanParsable<TimeSpan>
public value class TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IParsable<TimeSpan>, ISpanFormattable, ISpanParsable<TimeSpan>, IUtf8SpanFormattable
public value class TimeSpan : IComparable
public value class TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>
public struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IFormattable
public readonly struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IFormattable
public readonly struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, ISpanFormattable
public readonly struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IParsable<TimeSpan>, ISpanFormattable, ISpanParsable<TimeSpan>
public readonly struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IParsable<TimeSpan>, ISpanFormattable, ISpanParsable<TimeSpan>, IUtf8SpanFormattable
[System.Serializable]
public struct TimeSpan : IComparable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable<TimeSpan>, IFormattable
type TimeSpan = struct
    interface IFormattable
type TimeSpan = struct
    interface ISpanFormattable
    interface IFormattable
type TimeSpan = struct
    interface IFormattable
    interface IParsable<TimeSpan>
    interface ISpanFormattable
    interface ISpanParsable<TimeSpan>
type TimeSpan = struct
    interface IFormattable
    interface IParsable<TimeSpan>
    interface ISpanFormattable
    interface ISpanParsable<TimeSpan>
    interface IUtf8SpanFormattable
[<System.Serializable>]
type TimeSpan = struct
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TimeSpan = struct
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TimeSpan = struct
    interface IFormattable
Public Structure TimeSpan
Implements IComparable, IComparable(Of TimeSpan), IEquatable(Of TimeSpan), IFormattable
Public Structure TimeSpan
Implements IComparable, IComparable(Of TimeSpan), IEquatable(Of TimeSpan), ISpanFormattable
Public Structure TimeSpan
Implements IComparable, IComparable(Of TimeSpan), IEquatable(Of TimeSpan), IParsable(Of TimeSpan), ISpanFormattable, ISpanParsable(Of TimeSpan)
Public Structure TimeSpan
Implements IComparable, IComparable(Of TimeSpan), IEquatable(Of TimeSpan), IParsable(Of TimeSpan), ISpanFormattable, ISpanParsable(Of TimeSpan), IUtf8SpanFormattable
Public Structure TimeSpan
Implements IComparable
Public Structure TimeSpan
Implements IComparable, IComparable(Of TimeSpan), IEquatable(Of TimeSpan)
Наследование
TimeSpan
Атрибуты
Реализации

Примеры

В следующем примере создается TimeSpan экземпляр объекта , который представляет разницу между двумя датами. Затем отображаются TimeSpan свойства объекта .

// Define two dates.
DateTime date1 = new DateTime(2010, 1, 1, 8, 0, 15);
DateTime date2 = new DateTime(2010, 8, 18, 13, 30, 30);

// Calculate the interval between the two dates.
TimeSpan interval = date2 - date1;
Console.WriteLine("{0} - {1} = {2}", date2, date1, interval.ToString());

// Display individual properties of the resulting TimeSpan object.
Console.WriteLine("   {0,-35} {1,20}", "Value of Days Component:", interval.Days);
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Days:", interval.TotalDays);
Console.WriteLine("   {0,-35} {1,20}", "Value of Hours Component:", interval.Hours);
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Hours:", interval.TotalHours);
Console.WriteLine("   {0,-35} {1,20}", "Value of Minutes Component:", interval.Minutes);
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Minutes:", interval.TotalMinutes);
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Seconds Component:", interval.Seconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Seconds:", interval.TotalSeconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Milliseconds Component:", interval.Milliseconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Milliseconds:", interval.TotalMilliseconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Ticks:", interval.Ticks);

// This example displays the following output:
//       8/18/2010 1:30:30 PM - 1/1/2010 8:00:15 AM = 229.05:30:15
//          Value of Days Component:                             229
//          Total Number of Days:                   229.229340277778
//          Value of Hours Component:                              5
//          Total Number of Hours:                  5501.50416666667
//          Value of Minutes Component:                           30
//          Total Number of Minutes:                       330090.25
//          Value of Seconds Component:                           15
//          Total Number of Seconds:                      19,805,415
//          Value of Milliseconds Component:                       0
//          Total Number of Milliseconds:             19,805,415,000
//          Ticks:                               198,054,150,000,000
// Define two dates.
let date1 = DateTime(2010, 1, 1, 8, 0, 15)
let date2 = DateTime(2010, 8, 18, 13, 30, 30)

// Calculate the interval between the two dates.
let interval = date2 - date1
printfn $"{date2} - {date1} = {interval}"

// Display individual properties of the resulting TimeSpan object.
printfn $"""   {"Value of Days Component:",-35} {interval.Days,20}""" 
printfn $"""   {"Total Number of Days:",-35} {interval.TotalDays,20}""" 
printfn $"""   {"Value of Hours Component:",-35} {interval.Hours,20}""" 
printfn $"""   {"Total Number of Hours:",-35} {interval.TotalHours,20}""" 
printfn $"""   {"Value of Minutes Component:",-35} {interval.Minutes,20}""" 
printfn $"""   {"Total Number of Minutes:",-35} {interval.TotalMinutes,20}""" 
printfn $"""   {"Value of Seconds Component:",-35} {interval.Seconds,20:N0}""" 
printfn $"""   {"Total Number of Seconds:",-35} {interval.TotalSeconds,20:N0}""" 
printfn $"""   {"Value of Milliseconds Component:",-35} {interval.Milliseconds,20:N0}""" 
printfn $"""   {"Total Number of Milliseconds:",-35} {interval.TotalMilliseconds,20:N0}""" 
printfn $"""   {"Ticks:",-35} {interval.Ticks,20:N0}""" 

// This example displays the following output:
//       8/18/2010 1:30:30 PM - 1/1/2010 8:00:15 AM = 229.05:30:15
//          Value of Days Component:                             229
//          Total Number of Days:                   229.229340277778
//          Value of Hours Component:                              5
//          Total Number of Hours:                  5501.50416666667
//          Value of Minutes Component:                           30
//          Total Number of Minutes:                       330090.25
//          Value of Seconds Component:                           15
//          Total Number of Seconds:                      19,805,415
//          Value of Milliseconds Component:                       0
//          Total Number of Milliseconds:             19,805,415,000
//          Ticks:                               198,054,150,000,000
' Define two dates.
Dim date1 As Date = #1/1/2010 8:00:15AM#
Dim date2 As Date = #8/18/2010 1:30:30PM#
' Calculate the interval between the two dates.
Dim interval As TimeSpan = date2 - date1
Console.WriteLine("{0} - {1} = {2}", date2, date1, interval.ToString())
' Display individual properties of the resulting TimeSpan object.
Console.WriteLine("   {0,-35} {1,20}", "Value of Days Component:", interval.Days)
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Days:", interval.TotalDays)
Console.WriteLine("   {0,-35} {1,20}", "Value of Hours Component:", interval.Hours)
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Hours:", interval.TotalHours)
Console.WriteLine("   {0,-35} {1,20}", "Value of Minutes Component:", interval.Minutes)
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Minutes:", interval.TotalMinutes)
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Seconds Component:", interval.Seconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Seconds:", interval.TotalSeconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Milliseconds Component:", interval.Milliseconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Milliseconds:", interval.TotalMilliseconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Ticks:", interval.Ticks)
' The example displays the following output:
'       8/18/2010 1:30:30 PM - 1/1/2010 8:00:15 AM = 229.05:30:15
'          Value of Days Component:                             229
'          Total Number of Days:                   229.229340277778
'          Value of Hours Component:                              5
'          Total Number of Hours:                  5501.50416666667
'          Value of Minutes Component:                           30
'          Total Number of Minutes:                       330090.25
'          Value of Seconds Component:                           15
'          Total Number of Seconds:                      19,805,415
'          Value of Milliseconds Component:                       0
'          Total Number of Milliseconds:             19,805,415,000
'          Ticks:                               198,054,150,000,000
# Define two dates.
$Date2 = Get-Date -Date '2010/8/18' -Hour 13 -Minute 30 -Second 30
$Date1 = Get-Date -Date '2010/1/1'  -Hour 8  -Minute 0  -Second 15

# Calculate the interval between the two dates.
$Interval = $Date2 - $Date1
"{0} - {1} = {2}" -f $Date2, $Date1, ($Interval.ToString())

#  Display individual properties of the resulting TimeSpan object.
"   {0,-35} {1,20}"    -f "Value of Days Component:", $Interval.Days
"   {0,-35} {1,20}"    -f "Total Number of Days:", $Interval.TotalDays
"   {0,-35} {1,20}"    -f "Value of Hours Component:", $Interval.Hours
"   {0,-35} {1,20}"    -f "Total Number of Hours:", $Interval.TotalHours
"   {0,-35} {1,20}"    -f "Value of Minutes Component:", $Interval.Minutes
"   {0,-35} {1,20}"    -f "Total Number of Minutes:", $Interval.TotalMinutes
"   {0,-35} {1,20:N0}" -f "Value of Seconds Component:", $Interval.Seconds
"   {0,-35} {1,20:N0}" -f "Total Number of Seconds:", $Interval.TotalSeconds
"   {0,-35} {1,20:N0}" -f "Value of Milliseconds Component:", $Interval.Milliseconds
"   {0,-35} {1,20:N0}" -f "Total Number of Milliseconds:", $Interval.TotalMilliseconds
"   {0,-35} {1,20:N0}" -f "Ticks:", $Interval.Ticks

<# This sample produces the following output:

18/08/2010 13:30:30 - 01/01/2010 08:00:15 = 229.05:30:15
   Value of Days Component:                             229
   Total Number of Days:                   229.229340277778
   Value of Hours Component:                              5
   Total Number of Hours:                  5501.50416666667
   Value of Minutes Component:                           30
   Total Number of Minutes:                       330090.25
   Value of Seconds Component:                           15
   Total Number of Seconds:                      19,805,415
   Value of Milliseconds Component:                       0
   Total Number of Milliseconds:             19,805,415,000
   Ticks:                               198,054,150,000,000
#>

Комментарии

Объект TimeSpan представляет интервал времени (длительность времени или затраченного времени), измеряемый как положительное или отрицательное число дней, часов, минут, секунд и долей секунды. Структура TimeSpan также может использоваться для представления времени суток, но только в том случае, если время не связано с определенной датой. В противном случае вместо него следует использовать структуру DateTime или DateTimeOffset . (Дополнительные сведения об использовании TimeSpan структуры для отражения времени суток см. в разделе Выбор между DateTime, DateTimeOffset, TimeSpan и TimeZoneInfo.)

Примечание

Значение TimeSpan представляет интервал времени и может быть выражено в виде определенного количества дней, часов, минут, секунд и миллисекунд. Поскольку он представляет общий интервал без ссылки на конкретную начальную или конечную точку, его нельзя выразить в годах и месяцах, оба из которых имеют переменное количество дней. Он отличается от DateTime значения, представляющего дату и время без ссылки на определенный часовой пояс, или DateTimeOffset от значения, представляющего определенный момент времени.

Самая большая единица времени, используемая структурой TimeSpan для измерения длительности, — день. Интервалы времени измеряются в днях для обеспечения согласованности, так как количество дней в больших единицах времени, таких как месяцы и годы, меняется.

Значение TimeSpan объекта — это количество тактов, равное представленному интервалу времени. Тик равен 100 наносекундам, или одной десятимиллионовой части секунды. Значение TimeSpan объекта может варьироваться от TimeSpan.MinValue до TimeSpan.MaxValue.

Создание экземпляра значения TimeSpan

Создать экземпляр TimeSpan значения можно несколькими способами:

  • Путем вызова его неявного конструктора без параметров. При этом создается объект со значением TimeSpan.Zero, как показано в следующем примере.

    TimeSpan interval = new TimeSpan();
    Console.WriteLine(interval.Equals(TimeSpan.Zero));    // Displays "True".
    
    let interval = TimeSpan()
    printfn $"{interval.Equals TimeSpan.Zero}"    // Displays "True".
    
    Dim interval As New TimeSpan()
    Console.WriteLine(interval.Equals(TimeSpan.Zero))     ' Displays "True".
    
  • Путем вызова одного из его явных конструкторов. В следующем примере инициализируется TimeSpan значение с указанным количеством часов, минут и секунд.

    TimeSpan interval = new TimeSpan(2, 14, 18);
    Console.WriteLine(interval.ToString());              
    
    // Displays "02:14:18".
    
    let interval = TimeSpan(2, 14, 18)
    printfn $"{interval}"              
    
    // Displays "02:14:18".
    
    Dim interval As New TimeSpan(2, 14, 18)
    Console.WriteLine(interval.ToString())                ' Displays "02:14:18".
    
  • Путем вызова метода или выполнения операции, возвращающей TimeSpan значение. Например, можно создать TimeSpan экземпляр значения, представляющего интервал между двумя значениями даты и времени, как показано в следующем примере.

    DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
    DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
    TimeSpan travelTime = arrival - departure;  
    Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime);      
    
    // The example displays the following output:
    //       6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00
    
    let departure = DateTime(2010, 6, 12, 18, 32, 0)
    let arrival = DateTime(2010, 6, 13, 22, 47, 0)
    let travelTime = arrival - departure  
    printfn $"{arrival} - {departure} = {travelTime}"
    
    // The example displays the following output:
    //       6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00
    
    Dim departure As DateTime = #06/12/2010 6:32PM#
    Dim arrival As DateTime = #06/13/2010 10:47PM#
    Dim travelTime As TimeSpan = arrival - departure  
    Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime)      
    ' The example displays the following output:
    '       6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00
    

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

       Random rnd = new Random();
    
       TimeSpan timeSpent = TimeSpan.Zero;
    
       timeSpent += GetTimeBeforeLunch();
       timeSpent += GetTimeAfterLunch();
    
       Console.WriteLine("Total time: {0}", timeSpent);
    
       TimeSpan GetTimeBeforeLunch()
       {
          return new TimeSpan(rnd.Next(3, 6), 0, 0);
       }
       
       TimeSpan GetTimeAfterLunch()
       {
          return new TimeSpan(rnd.Next(3, 6), 0, 0);
       }
    
       // The example displays output like the following:
       //        Total time: 08:00:00
    
    open System
    
    let rnd = Random()
    
    let getTimeBeforeLunch () =
        TimeSpan(rnd.Next(3, 6), 0, 0)
    
    let getTimeAfterLunch() =
        TimeSpan(rnd.Next(3, 6), 0, 0)
    
    do
        let timeSpent = TimeSpan.Zero
    
        let timeSpent = timeSpent + getTimeBeforeLunch ()
        let timeSpent = timeSpent + getTimeAfterLunch ()
    
        printfn $"Total time: {timeSpent}"
    
    
    // The example displays output like the following:
    //        Total time: 08:00:00
    
    Module Example
       Dim rnd As New Random()
       
       Public Sub Main()
          Dim timeSpent As TimeSpan = TimeSpan.Zero
    
          timeSpent += GetTimeBeforeLunch()
          timeSpent += GetTimeAfterLunch()
    
          Console.WriteLine("Total time: {0}", timeSpent)
       End Sub
       
       Private Function GetTimeBeforeLunch() As TimeSpan
          Return New TimeSpan(rnd.Next(3, 6), 0, 0)
       End Function
       
       Private Function GetTimeAfterLunch() As TimeSpan
          Return New TimeSpan(rnd.Next(3, 6), 0, 0)
       End Function
    End Module
    ' The example displays output like the following:
    '       Total time: 08:00:00
    

    TimeSpan значения возвращаются арифметическими операторами и методами DateTimeструктур , DateTimeOffsetи TimeSpan .

  • Путем анализа строкового TimeSpan представления значения. Методы Parse и TryParse можно использовать для преобразования строк, содержащих интервалы времени, в TimeSpan значения. В следующем примере метод используется Parse для преобразования массива строк в TimeSpan значения.

    string[] values = { "12", "31.", "5.8:32:16", "12:12:15.95", ".12"};
    foreach (string value in values)
    {
       try {
          TimeSpan ts = TimeSpan.Parse(value);
          Console.WriteLine("'{0}' --> {1}", value, ts);
       }
       catch (FormatException) {
          Console.WriteLine("Unable to parse '{0}'", value);
       }
       catch (OverflowException) {
          Console.WriteLine("'{0}' is outside the range of a TimeSpan.", value);
       }   
    }
    
    // The example displays the following output:
    //       '12' --> 12.00:00:00
    //       Unable to parse '31.'
    //       '5.8:32:16' --> 5.08:32:16
    //       '12:12:15.95' --> 12:12:15.9500000
    //       Unable to parse '.12'
    
    let values = [| "12"; "31."; "5.8:32:16"; "12:12:15.95"; ".12" |]
    for value in values do
        try
            let ts = TimeSpan.Parse value
            printfn $"'{value}' --> {ts}"
        with 
        | :? FormatException ->
            printfn $"Unable to parse '{value}'"
        | :? OverflowException ->
            printfn $"'{value}' is outside the range of a TimeSpan."
    
    // The example displays the following output:
    //       '12' --> 12.00:00:00
    //       Unable to parse '31.'
    //       '5.8:32:16' --> 5.08:32:16
    //       '12:12:15.95' --> 12:12:15.9500000
    //       Unable to parse '.12'
    
    Dim values() As String = { "12", "31.", "5.8:32:16", "12:12:15.95", ".12"}
    For Each value As String In values
       Try
          Dim ts As TimeSpan = TimeSpan.Parse(value)
          Console.WriteLine("'{0}' --> {1}", value, ts)
       Catch e As FormatException
          Console.WriteLine("Unable to parse '{0}'", value)
       Catch e As OverflowException
          Console.WriteLine("'{0}' is outside the range of a TimeSpan.", value)
       End Try   
    Next
    ' The example displays the following output:
    '       '12' --> 12.00:00:00
    '       Unable to parse '31.'
    '       '5.8:32:16' --> 5.08:32:16
    '       '12:12:15.95' --> 12:12:15.9500000
    '       Unable to parse '.12'
    

    Кроме того, можно определить точный формат входной строки, которую необходимо проанализировать и преобразовать в TimeSpan значение, вызвав ParseExact метод или TryParseExact .

Выполнение операций со значениями TimeSpan

Длительность времени можно сложить и вычесть с помощью Addition операторов и Subtraction или путем вызова Add методов и Subtract . Вы также можете сравнить две временные интервалы, вызвав методы Compare, CompareToи Equals . Структура TimeSpan также включает Duration методы и Negate , которые преобразуют интервалы времени в положительные и отрицательные значения.

Диапазон значений TimeSpanMinValueMaxValue.

Форматирование значения TimeSpan

Значение TimeSpan может быть представлено как [-]d. чч:мм:сс. ff, где необязательный знак минус указывает на отрицательный интервал времени, компонент d — дни, чч — часы, измеренные на 24-часовых часах, мм — минуты, ss — секунды, а ff — доли секунды. То есть интервал времени состоит из положительного или отрицательного числа дней без времени суток, или числа дней с временем суток или только времени суток.

Начиная с платформа .NET Framework 4, TimeSpan структура поддерживает форматирование с учетом TimeSpan языка и региональных параметров через перегрузки метода ToString , который преобразует значение в строковое представление. Метод по умолчанию TimeSpan.ToString() возвращает интервал времени с использованием инвариантного формата, идентичного значению, возвращаемого в предыдущих версиях платформа .NET Framework. Перегрузка TimeSpan.ToString(String) позволяет указать строку формата, которая определяет строковое представление интервала времени. Перегрузка TimeSpan.ToString(String, IFormatProvider) позволяет указать строку формата и язык и региональные параметры, соглашения о форматировании которых используются для создания строкового представления интервала времени. TimeSpan поддерживает как строки стандартного, так и пользовательского формата. (Дополнительные сведения см. в разделах Стандартные строки формата TimeSpan и Настраиваемые строки формата TimeSpan.) Однако только строки стандартного формата чувствительны к языку и региональным параметрам.

Восстановление устаревшего форматирования TimeSpan

В некоторых случаях код, который успешно форматирует TimeSpan значения в платформа .NET Framework 3.5 и более ранних версиях, завершается сбоем в платформа .NET Framework 4. Чаще всего это происходит в коде<, который вызывает метод элемента TimeSpan_LegacyFormatMode> для форматирования TimeSpan значения с помощью строки форматирования. Следующий пример успешно форматирует TimeSpan значение в платформа .NET Framework 3.5 и более ранних версий, но вызывает исключение в платформа .NET Framework 4 и более поздних версиях. Обратите внимание, что он пытается отформатировать TimeSpan значение с помощью неподдерживаемого описателя формата, который игнорируется в платформа .NET Framework 3.5 и более ранних версиях.

ShowFormattingCode();
// Output from .NET Framework 3.5 and earlier versions:
//       12:30:45
// Output from .NET Framework 4:
//       Invalid Format    

Console.WriteLine("---");

ShowParsingCode();
// Output:
//       000000006 --> 6.00:00:00

void ShowFormattingCode()
{
   TimeSpan interval = new TimeSpan(12, 30, 45);
   string output;
   try {
      output = String.Format("{0:r}", interval);
   }
   catch (FormatException) {
      output = "Invalid Format";
   }
   Console.WriteLine(output);
}

void ShowParsingCode()
{
   string value = "000000006";
   try {
      TimeSpan interval = TimeSpan.Parse(value);
      Console.WriteLine("{0} --> {1}", value, interval);
   }
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }   
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}
let showFormattingCode () =
    let interval = TimeSpan(12, 30, 45)
    try
        $"{interval:r}"
    with :? FormatException ->
        "Invalid Format"
    |> printfn "%s"

let showParsingCode () =
    let value = "000000006"
    try
        let interval = TimeSpan.Parse value
        printfn $"{value} --> {interval}"
    with
    | :? FormatException ->
        printfn $"{value}: Bad Format"
    | :? OverflowException ->
        printfn $"{value}: Overflow"

showFormattingCode ()
// Output from .NET Framework 3.5 and earlier versions:
//       12:30:45
// Output from .NET Framework 4:
//       Invalid Format    

printfn "---"

showParsingCode ()
// Output:
//       000000006 --> 6.00:00:00
Dim interval As New TimeSpan(12, 30, 45)
Dim output As String
Try
   output = String.Format("{0:r}", interval)
Catch e As FormatException
   output = "Invalid Format"
End Try
Console.WriteLine(output)
' Output from .NET Framework 3.5 and earlier versions:
'       12:30:45
' Output from .NET Framework 4:
'       Invalid Format

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

  • Создав файл конфигурации, содержащий <элемент TimeSpan_LegacyFormatMode>. Задание атрибута enabled этого элемента для true восстановления устаревшего TimeSpan форматирования для каждого приложения.

  • Задав параметр совместимости "NetFx40_TimeSpanLegacyFormatMode" при создании домена приложения. Это позволяет использовать устаревшее TimeSpan форматирование для каждого домена приложения. В следующем примере создается домен приложения, использующий устаревшее форматирование TimeSpan .

    using System;
    
    public class Example
    {
       public static void Main()
       {
          AppDomainSetup appSetup = new AppDomainSetup();
          appSetup.SetCompatibilitySwitches( new string[] { "NetFx40_TimeSpanLegacyFormatMode" } );
          AppDomain legacyDomain = AppDomain.CreateDomain("legacyDomain", 
                                                          null, appSetup);
          legacyDomain.ExecuteAssembly("ShowTimeSpan.exe");
       }
    }
    
    open System
    
    let appSetup = AppDomainSetup()
    appSetup.SetCompatibilitySwitches [| "NetFx40_TimeSpanLegacyFormatMode" |]
    let legacyDomain = AppDomain.CreateDomain("legacyDomain", null, appSetup)
    legacyDomain.ExecuteAssembly "ShowTimeSpan.exe" |> ignore
    
    Module Example
       Public Sub Main()
          Dim appSetup As New AppDomainSetup()
          appSetup.SetCompatibilitySwitches( { "NetFx40_TimeSpanLegacyFormatMode" } )
          Dim legacyDomain As AppDomain = AppDomain.CreateDomain("legacyDomain", 
                                                                 Nothing, appSetup)
          legacyDomain.ExecuteAssembly("ShowTimeSpan.exe")
       End Sub
    End Module
    

    Когда следующий код выполняется в новом домене приложения, он возвращается к устаревшему TimeSpan поведению форматирования.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          TimeSpan interval = DateTime.Now - DateTime.Now.Date;
          string msg = String.Format("Elapsed Time Today: {0:d} hours.",
                                     interval);
          Console.WriteLine(msg);
       }
    }
    // The example displays the following output:
    //       Elapsed Time Today: 01:40:52.2524662 hours.
    
    open System
    
    let interval = DateTime.Now - DateTime.Now.Date
    printfn $"Elapsed Time Today: {interval:d} hours."
    // The example displays the following output:
    //       Elapsed Time Today: 01:40:52.2524662 hours.
    
    Module Example
       Public Sub Main()
          Dim interval As TimeSpan = Date.Now - Date.Now.Date
          Dim msg As String = String.Format("Elapsed Time Today: {0:d} hours.",
                                             interval)
          Console.WriteLine(msg)
       End Sub
    End Module
    ' The example displays output like the following:
    '       Elapsed Time Today: 01:40:52.2524662 hours.
    

Конструкторы

TimeSpan(Int32, Int32, Int32)

Инициализирует новый экземпляр структуры TimeSpan заданным количеством часов, минут и секунд.

TimeSpan(Int32, Int32, Int32, Int32)

Инициализирует новый экземпляр структуры TimeSpan заданным количеством дней, часов, минут и секунд.

TimeSpan(Int32, Int32, Int32, Int32, Int32)

Инициализирует новый экземпляр структуры TimeSpan заданным количеством дней, часов, минут, секунд и миллисекунд.

TimeSpan(Int32, Int32, Int32, Int32, Int32, Int32)

Инициализирует новый экземпляр TimeSpan структуры указанным числом дней, часов, минут, секунд, миллисекунд и микросекунд.

TimeSpan(Int64)

Инициализирует новый экземпляр структуры TimeSpan заданным числом тактов.

Поля

MaxValue

Представляет максимальное значение TimeSpan. Это поле доступно только для чтения.

MinValue

Представляет минимальное значение TimeSpan. Это поле доступно только для чтения.

NanosecondsPerTick

Представляет число наносекунд на тик. Это поле является константой.

TicksPerDay

Возвращает количество тактов в 1 сутках. Это поле является константой.

TicksPerHour

Представляет количество тактов в 1 часе. Это поле является константой.

TicksPerMicrosecond

Представляет количество тактов в 1 микросекундах. Это поле является константой.

TicksPerMillisecond

Возвращает количество тактов в 1 миллисекунде. Это поле является константой.

TicksPerMinute

Возвращает количество тактов в 1 минуте. Это поле является константой.

TicksPerSecond

Возвращает количество тактов в 1 секунде.

Zero

Представляет нулевое значение TimeSpan. Это поле доступно только для чтения.

Свойства

Days

Возвращает компонент дней периода времени, представленного текущей структурой TimeSpan.

Hours

Возвращает компонент часов периода времени, представленного текущей структурой TimeSpan.

Microseconds

Возвращает компонент микросекунд интервала времени, представленного текущей TimeSpan структурой.

Milliseconds

Возвращает компонент миллисекунд периода времени, представленного текущей структурой TimeSpan.

Minutes

Возвращает компонент минут периода времени, представленного текущей структурой TimeSpan.

Nanoseconds

Возвращает компонент наносекунд интервала времени, представленного текущей TimeSpan структурой.

Seconds

Возвращает компонент секунд периода времени, представленного текущей структурой TimeSpan.

Ticks

Возвращает количество тактов, представляющее значение текущей структуры TimeSpan.

TotalDays

Возвращает значение текущей структуры TimeSpan, выраженное как целое и дробное количество дней.

TotalHours

Получает значение текущей структуры TimeSpan, выраженное как целое и дробное количество часов.

TotalMicroseconds

Возвращает значение текущей TimeSpan структуры, выраженное в целых и дробных микросекундах.

TotalMilliseconds

Получает значение текущей структуры TimeSpan, выраженное как целое и дробное количество миллисекунд.

TotalMinutes

Возвращает значение текущей структуры TimeSpan, выраженное как целое и дробное количество минут.

TotalNanoseconds

Возвращает значение текущей TimeSpan структуры, выраженное в целых и дробных наносекундах.

TotalSeconds

Возвращает значение текущей структуры TimeSpan, выраженное как целое и дробное количество секунд.

Методы

Add(TimeSpan)

Возвращает новый объект TimeSpan, значение которого равно сумме указанного объекта TimeSpan и данного экземпляра.

Compare(TimeSpan, TimeSpan)

Сравнивает два значения TimeSpan и возвращает целое значение, которое показывает, является ли первое значение короче, равно или длиннее второго значения.

CompareTo(Object)

Сравнивает данный экземпляр с указанным объектом и возвращает целое число, которое показывает, как соотносится данный экземпляр с указанным объектом: короче него, равен ему или длиннее указанного объекта.

CompareTo(TimeSpan)

Сравнивает данный экземпляр с указанным объектом TimeSpan и возвращает целое число, которое показывает, как соотносится данный экземпляр с объектом TimeSpan: короче него, равен ему или длиннее указанного объекта.

Divide(Double)

Возвращает новый объект TimeSpan, значение которого является результатом деления данного экземпляра и указанного divisor.

Divide(TimeSpan)

Возвращает новое значение Double, которое является результатом деления данного экземпляра и указанного ts.

Duration()

Возвращает новый объект TimeSpan, значением которого является абсолютное значение текущего объекта TimeSpan.

Equals(Object)

Возвращает значение, показывающее, равен ли данный экземпляр заданному объекту.

Equals(TimeSpan)

Возвращает значение, указывающее, равен ли данный экземпляр заданному объекту TimeSpan.

Equals(TimeSpan, TimeSpan)

Возвращает значение, указывающее, равны ли два заданных экземпляра TimeSpan.

FromDays(Double)

Возвращает объект TimeSpan, представляющий заданное количество дней, округленное до ближайшей миллисекунды.

FromHours(Double)

Возвращает объект TimeSpan, представляющий указанное количество часов, округленное до ближайшей миллисекунды.

FromMicroseconds(Double)

Возвращает объект , TimeSpan представляющий указанное количество микросекунд.

FromMilliseconds(Double)

Возвращает объект TimeSpan, представляющий указанное количество миллисекунд.

FromMinutes(Double)

Возвращает объект TimeSpan, представляющий указанное количество минут, округленное до ближайшей миллисекунды.

FromSeconds(Double)

Возвращает объект TimeSpan, представляющий указанное количество секунд, округленное до ближайшей миллисекунды.

FromTicks(Int64)

Возвращает объект TimeSpan, представляющий заданное время в тактах.

GetHashCode()

Возвращает хэш-код для данного экземпляра.

Multiply(Double)

Возвращает новый объект TimeSpan, значение которого является результатом умножения данного экземпляра и указанного factor.

Negate()

Возвращает новый объект TimeSpan, значение которого равно значению данного экземпляра с противоположным знаком.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Преобразует представление диапазона интервала времени в его эквивалент TimeSpan, используя указанные сведения о форматировании, связанные с языком и региональными параметрами.

Parse(String)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan.

Parse(String, IFormatProvider)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные сведения о форматировании, связанные с языком и региональными параметрами.

ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, TimeSpanStyles)

Преобразует диапазон символов интервала времени в его эквивалент TimeSpan, используя указанные формат и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать заданному формату.

ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, TimeSpanStyles)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные форматы, сведения о форматировании, связанные с языком и региональными параметрами, и стили. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

ParseExact(String, String, IFormatProvider)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные формат и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать заданному формату.

ParseExact(String, String, IFormatProvider, TimeSpanStyles)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные формат, сведения о форматировании, связанные с языком и региональными параметрами, и стили. Формат строкового представления должен полностью соответствовать заданному формату.

ParseExact(String, String[], IFormatProvider)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанный массив строк форматирования и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

ParseExact(String, String[], IFormatProvider, TimeSpanStyles)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные форматы, сведения о форматировании, связанные с языком и региональными параметрами, и стили. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

Subtract(TimeSpan)

Возвращает новый объект TimeSpan, значение которого равно разности между указанным объектом TimeSpan и данным экземпляром.

ToString()

Преобразует значение текущего объекта TimeSpan в эквивалентное ему строковое представление.

ToString(String)

Преобразует значение текущего объекта TimeSpan в эквивалентное ему строковое представление с использованием заданного формата.

ToString(String, IFormatProvider)

Преобразует числовое значение текущего объекта TimeSpan в эквивалентное ему строковое представление с использованием указанного формата и сведений об особенностях форматирования для данного языка и региональных параметров.

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Представляет интервал времени.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

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

TryParse(ReadOnlySpan<Char>, IFormatProvider, TimeSpan)

Преобразует представление диапазона интервала времени в его эквивалент TimeSpan, используя указанную информацию о форматировании, связанную с языком и региональными параметрами, и возвращает значение, которое показывает успешность преобразования.

TryParse(ReadOnlySpan<Char>, TimeSpan)

Преобразует представление диапазона интервала времени в его эквивалент TimeSpan и возвращает значение, позволяющее определить успешность преобразования.

TryParse(String, IFormatProvider, TimeSpan)

Преобразовывает заданное строковое представление интервала времени в его эквивалент TimeSpan, используя указанную информацию о форматировании, связанную с языком и региональными параметрами, и возвращает значение, которое показывает успешность преобразования.

TryParse(String, TimeSpan)

Преобразовывает строковое представление интервала времени в его эквивалент TimeSpan и возвращает значение, позволяющее определить успешность преобразования.

TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, TimeSpan)

Преобразует указанное представление диапазона интервала времени в его эквивалент TimeSpan, используя указанные формат и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать заданному формату.

TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, TimeSpanStyles, TimeSpan)

Преобразует заданное представление диапазона интервала времени в его эквивалент TimeSpan, используя указанные форматы, информацию о форматировании, связанную с языком и региональными параметрами, и стили, и возвращает значение, которое показывает успешность преобразования. Формат строкового представления должен полностью соответствовать заданному формату.

TryParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, TimeSpan)

Преобразует указанное представление диапазона интервала времени в его эквивалент TimeSpan, используя указанные форматы и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

TryParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, TimeSpanStyles, TimeSpan)

Преобразует указанное представление диапазона интервала времени в его эквивалент TimeSpan, используя указанные форматы, сведения о форматировании, связанные с языком и региональными параметрами, и стили. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

TryParseExact(String, String, IFormatProvider, TimeSpan)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные формат и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать заданному формату.

TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan)

Преобразует строковое представление интервала времени в его эквивалент TimeSpan, используя указанные формат, сведения о форматировании, связанные с языком и региональными параметрами, и стили. Формат строкового представления должен полностью соответствовать заданному формату.

TryParseExact(String, String[], IFormatProvider, TimeSpan)

Преобразует указанное строковое представление интервала времени в его эквивалент TimeSpan, используя указанные форматы и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

TryParseExact(String, String[], IFormatProvider, TimeSpanStyles, TimeSpan)

Преобразует указанное строковое представление интервала времени в его эквивалент TimeSpan, используя указанные форматы, сведения о форматировании, связанные с языком и региональными параметрами, и стили. Формат строкового представления должен полностью соответствовать одному из заданных форматов.

Операторы

Addition(TimeSpan, TimeSpan)

Складывает два указанных экземпляра TimeSpan.

Division(TimeSpan, Double)

Возвращает новый объект TimeSpan, значение которого является результатом деления экземпляра timeSpan и указанного divisor.

Division(TimeSpan, TimeSpan)

Возвращает новое значение Double, которое является результатом деления экземпляра t1 и указанного t2.

Equality(TimeSpan, TimeSpan)

Указывает, равны ли два экземпляра TimeSpan.

GreaterThan(TimeSpan, TimeSpan)

Показывает, является ли заданное значение TimeSpan большим, чем другое заданное значение TimeSpan.

GreaterThanOrEqual(TimeSpan, TimeSpan)

Показывает, является ли заданное значение TimeSpan большим или равным другому заданному значению TimeSpan.

Inequality(TimeSpan, TimeSpan)

Показывает, являются ли два экземпляра TimeSpan неравными.

LessThan(TimeSpan, TimeSpan)

Показывает, является ли заданное значение TimeSpan меньшим, чем другое заданное значение TimeSpan.

LessThanOrEqual(TimeSpan, TimeSpan)

Показывает, является ли заданное значение TimeSpan меньшим или равным другому заданному значению TimeSpan.

Multiply(Double, TimeSpan)

Возвращает новый объект TimeSpan, значение которого является результатом умножения указанного factor и указанного экземпляра timeSpan.

Multiply(TimeSpan, Double)

Возвращает новый объект TimeSpan, значение которого является результатом умножения указанного экземпляра timeSpan и указанного factor.

Subtraction(TimeSpan, TimeSpan)

Вычитает указанный объект TimeSpan из другого указанного объекта TimeSpan.

UnaryNegation(TimeSpan)

Возвращает объект TimeSpan со значением, равным значению данного экземпляра с противоположным знаком.

UnaryPlus(TimeSpan)

Возвращает указанный экземпляр TimeSpan.

Явные реализации интерфейса

IComparable.CompareTo(Object)

Сравнивает данный экземпляр с указанным объектом и возвращает целое число, которое показывает, как соотносится данный экземпляр с указанным объектом: короче него, равен ему или длиннее указанного объекта.

Применяется к

См. также раздел