0

我想将时间添加到当前时间,或者换句话说,我有 UTC + 0 的时间,我想要 UTC + 5.00 的时间,我可以减去尽可能多的时间

  • 它适用于“(20:15 current_time)-(10)”
  • 它适用于“(20:12 current_time)-(10 * 324234小时)”
  • 即使“(20:13 current_time)+(1)”添加它也有效
  • 但是当“(20:13 current_time)+(5小时)”时它不起作用

代码:

using System;

namespace week3
{

class LocalTime
{
    static string Time, City;
    static decimal time;

    public LocalTime(string city, double add) {
        Time = Convert.ToString(DateTime.Now + TimeSpan.FromHours(add));
        Time = Time.Substring(11, 5);
        time = Convert.ToDecimal(Time.Substring(0, 2) + "." + Time.Substring(3, 2));
        City = time.ToString();
        Time = City.Substring(0, 2) + ":" + City.Substring(3, 2);
        City = city;
        DisplayTimeAndCity("", "");

    }
    static void DisplayTimeAndCity(string x, string y)
    {

        Console.WriteLine(City + " - " +Time);
    }
}

class London : LocalTime {
    public London() : base("London", 0) {   
    }
}
class NewYork : LocalTime
{
    public NewYork(): base("NewYork", 5)
    {
    }
}
class Tokyo : LocalTime
{
    public Tokyo(): base("Tokyo", -9)
    {
    }
}
class HongKong : LocalTime
{
    public HongKong(): base("Hong Kong", -8)
    {
    }
}
class Test {
    static void Main() {
        London a = new London();
        NewYork b = new NewYork();

    }

}

}

4

4 回答 4

1

要为 a 添加 5 小时,DateTime您可以简单地使用以下命令:

DateTime.Now.AddHours(5);

还有一个简单的函数可以从 DateTime 中减去:

DateTime.Now.Subtract(TimeSpan.FromHours(1));
于 2013-11-01T23:58:59.213 回答
1

当您尝试表示不同时区的时间时,您可能会发现TimeZoneInfo.ConvertTimeBySystemTimeZoneId很有用。您可能更喜欢使用框架中的某些东西,而不是定义多个类。用于标识每个区域的字符串的文档位于TimeZoneInfo.FindSystemTimeZoneById 方法中,并且这些字符串与TimeZone.Id 属性相关。我在 Windows 8.1 上测试过,效果很好。

时区标识符是唯一标识特定时区的键字符串。在 Windows XP 和 Windows Vista 中,它对应于注册表的 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zone 分支的子项。它可以作为参数传递给 FindSystemTimeZoneById 方法,以从注册表中检索特定时区。

void Main()
{
    DateTime currentTime = DateTime.Now;
    Console.WriteLine("Current Times:");
    Console.WriteLine();
    Console.WriteLine("Los Angeles: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Pacific Standard Time"));
    Console.WriteLine("Chicago: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Central Standard Time"));
    Console.WriteLine("New York: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Eastern Standard Time"));
    Console.WriteLine("London: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "GMT Standard Time"));
    Console.WriteLine("Moscow: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Russian Standard Time"));
    Console.WriteLine("New Delhi: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "India Standard Time"));
    Console.WriteLine("Beijing: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "China Standard Time"));
    Console.WriteLine("Tokyo: {0}", 
                      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Tokyo Standard Time"));
}

这列出了可以在本地机器上找到的时区:

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
Console.WriteLine("The local system has the following {0} time zones", zones.Count);
foreach (TimeZoneInfo zone in zones)
   Console.WriteLine(zone.Id);
于 2013-11-02T00:04:01.497 回答
0

您也可以将DateTimeOffset其用于您的目的:

DateTimeOffset dateTimeWithOffset = new DateTimeOffset(DateTime.UtcNow).ToOffset(TimeSpan.FromHours(5));

这样,您将以标准方式保留时间和偏移信息。

于 2013-11-02T00:04:02.060 回答
0

我认为您正在寻找的是“如何将DateTime值格式化为hours:minutes”:

 var time = (DateTime.Now + TimeSpan.FromHours(3)).ToString("hh:mm");   

有关格式化选项的更多信息 -自定义日期和时间格式字符串

TimeZoneInfo请注意,其他答案提出了更好的方法来通过or处理时区DateTimeOffset

于 2013-11-02T00:07:21.857 回答