2013-11-01 25 views
0

我想添加時間到當前時間或換句話說,我有時間在UTC + 0,我希望那個時間在UTC + 5.00, 我可以減去多少小時我可以C# - 無法添加小時到當前時間

  • 它工作得很好 「(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(); 

    } 

} 

}

+3

你爲什麼要使用字符串操作? –

+0

datetimevariable.AddHours(5);如果你需要減去AddHours(-5); – terrybozzio

回答

0

我知道你在尋找的是「如何格式化DateTimehours:minutes」:

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

更多關於格式化選項的信息 - Custom Date and Time Format Strings

請注意,其他答案建議通過TimeZoneInfoDateTimeOffset處理時區的更好方法。

1

加5小時就到了一個DateTime你可以簡單地使用以下命令:

DateTime.Now.AddHours(5); 

而且也有一個簡單的功能。減去from DateTime:

DateTime.Now.Subtract(TimeSpan.FromHours(1)); 
+0

+0:OP已經使用合理的'+ TimeSpan.FromHours(add)'。 '.AddHours(5)'較短,但不太可能對非常奇怪的字符串切片代碼有幫助(它可能會嘗試做一些類似'.ToString(「hh:mm」)')的... –

1

由於您試圖在不同時區表示時間,因此您可能會發現TimeZoneInfo.ConvertTimeBySystemTimeZoneId有用。您可能更喜歡使用框架中的某些東西,而不是定義幾個類。標識每個區域的字符串的文檔位於TimeZoneInfo.FindSystemTimeZoneById Method中,字符串與TimeZone.Id property相關。我在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); 
0

您也可以使用DateTimeOffset你的目的:

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

有了這一點,你將以標準方式保存時間和偏移量信息。