UTC Time
北京時(shí)區(qū)是東八區(qū),領(lǐng)先UTC八個(gè)小時(shí),在電子郵件信頭的Date域記為+0800。如果在電子郵件的信頭中有這么一行:
Date: Fri, 08 Nov 2002 09:42:22 +0800
說(shuō)明信件的發(fā)送地的地方時(shí)間是二○○二年十一月八號(hào),星期五,早上九點(diǎn)四十二分(二十二秒),這個(gè)地方的本地時(shí)領(lǐng)先UTC八個(gè)小時(shí)(+0800, 就是東八區(qū)時(shí)間)。電子郵件信頭的Date域使用二十四小時(shí)的時(shí)鐘,而不使用AM和PM來(lái)標(biāo)記上下午。
以這個(gè)電子郵件的發(fā)送時(shí)間為例,如果要把這個(gè)時(shí)間轉(zhuǎn)化為UTC,可以使用一下公式:
UTC + 時(shí)區(qū)差 = 本地時(shí)間
時(shí)區(qū)差東為正,西為負(fù)。在此,把東八區(qū)時(shí)區(qū)差記為 +0800,
UTC + (+0800) = 本地(北京)時(shí)間 (1)
那么,UTC = 本地時(shí)間(北京時(shí)間))- 0800 (2)
0942 - 0800 = 0142
即UTC是當(dāng)天凌晨一點(diǎn)四十二分二十二秒。如果結(jié)果是負(fù)數(shù)就意味著是UTC前一天,把這個(gè)負(fù)數(shù)加上2400就是UTC在前一天的時(shí)間。例如,本地 (北京)時(shí)間是 0432 (凌晨四點(diǎn)三十二分),那么,UTC就是 0432 - 0800 = -0368,負(fù)號(hào)意味著是前一天, -0368 + 2400 = 2032,既前一天的晚上八點(diǎn)三十二分。
紐約的時(shí)區(qū)是西五區(qū),比UTC落后五個(gè)小時(shí),記為 -0500:
UTC + (-0500) = 紐約時(shí)間 (3)
UTC = 紐約時(shí)間 + 0500 (4)
把(2)式 - (4)式相比較,
UTC = 北京時(shí)間 - 0800 = 紐約時(shí)間 + 0500 (5)
即 北京時(shí)間 = 紐約時(shí)間 + 1300 (6)
即北京時(shí)間領(lǐng)先紐約時(shí)間十三個(gè)小時(shí),由(6)式,
紐約時(shí)間 = 北京時(shí)間 - 1300 (7)
在四月下旬,紐約又換用夏令時(shí),又稱(chēng)為日光節(jié)約時(shí),比標(biāo)準(zhǔn)紐約時(shí)間提前一個(gè)小時(shí),實(shí)際成為西四區(qū)的標(biāo)準(zhǔn)時(shí)間,成為 -0400。
UTC + (-0400) = 紐約夏令時(shí),套用以上公式,
北京時(shí)間 = 紐約夏令時(shí) + 1200
紐約夏令時(shí) = 北京時(shí)間 - 1200
在這些轉(zhuǎn)換中,最重要的公式就是
UTC + 時(shí)區(qū)差 = 本地時(shí)間
時(shí)區(qū)差東為正,西為負(fù)。例如,東八區(qū)(北京)是 +0800,西五區(qū)(紐約)是-0500,加州是西八區(qū),是-0800,美國(guó)中部時(shí)區(qū)是西六區(qū),-0600,美國(guó)山地時(shí)區(qū)是西七區(qū),-0700,太平洋時(shí) 區(qū)是西八區(qū),-0800,在夏天使用夏時(shí)制,成為-0700。德國(guó)時(shí)區(qū)是東一區(qū),+0100,夏天變?yōu)?#43;0200。
多數(shù)電子郵件程序,例如Outlook Express,在顯示時(shí)間時(shí),計(jì)算機(jī)程序把時(shí)間先轉(zhuǎn)換成為本地時(shí)間再顯示,例如,郵件的Date域?yàn)?#xff1a;
Date: Fri, 08 Nov 2002 09:42:22 +0800
Outlook Express在顯示時(shí)就顯示為:
Date: Thur, 07 Nov 2002 08:42:22 pm,把北京時(shí)間轉(zhuǎn)換成為了紐約時(shí)間,而且把二十四小時(shí)格式的時(shí)間轉(zhuǎn)換成為了十二小時(shí)的格式。當(dāng)然,為了時(shí)間轉(zhuǎn)換正確,發(fā)送方和接受方的計(jì)算機(jī)的時(shí)區(qū)都要 設(shè)置正確,在這里,發(fā)送方的時(shí)區(qū)要正確地設(shè)為北京時(shí)區(qū)東八區(qū),而我的時(shí)區(qū)要設(shè)為西五區(qū)。
為了方便起見(jiàn),我在這里放上紐約,加洲以及北京實(shí)時(shí)顯示的時(shí)鐘,以省去計(jì)算的麻煩。
?
全球標(biāo)準(zhǔn)時(shí)間 (UTC)
全球標(biāo)準(zhǔn)時(shí)間指的是由世界時(shí)間標(biāo)準(zhǔn)設(shè)定的時(shí)間。原先也被稱(chēng)為格林威治標(biāo)準(zhǔn)時(shí)間或者 GMT。
我們知道,本初子午線被定義從倫敦郊區(qū)的皇家格林尼治天文臺(tái)穿過(guò),那里的時(shí)間被定義為全球的標(biāo)準(zhǔn)時(shí)間。
中國(guó)位于東八區(qū),所以要比這個(gè)時(shí)間早八個(gè)小時(shí),也就是說(shuō),全球標(biāo)準(zhǔn)時(shí)間是5日0點(diǎn)時(shí),中國(guó)是5日的8點(diǎn),而美國(guó)部分地區(qū)還處于4日的黃昏。
有些對(duì)象、函數(shù)中,需要使用 UTC 時(shí)間,我們就需要將中國(guó)的時(shí)間轉(zhuǎn)換成 UTC 時(shí)間,使用 toUTCString。
var d = new Date();
document.write("當(dāng)前的 UTC 時(shí)間是:" + d.toUTCString());
toGMTString 與 toUTCString 功能、用法均相同,但我們推薦使用 toUTCString,畢竟 GMT 是以前的稱(chēng)呼。
?
c#
?
DateTime 值
DateTime 類(lèi)型的時(shí)間值描述通常使用協(xié)調(diào)世界時(shí) (UTC) 標(biāo)準(zhǔn)來(lái)表達(dá),它是格林尼治標(biāo)準(zhǔn)時(shí)間 (GMT) 的國(guó)際識(shí)別名。協(xié)調(diào)世界時(shí)是在經(jīng)度零度(即 UTC 原點(diǎn))測(cè)量到的時(shí)間。夏時(shí)制不適用于 UTC。
本 地時(shí)間是相對(duì)于特定時(shí)區(qū)而言。時(shí)區(qū)與時(shí)區(qū)偏移量關(guān)聯(lián),它是時(shí)區(qū)從 UTC 原點(diǎn)算起的以小時(shí)為單位的偏移量。此外,本地時(shí)間有可能受夏時(shí)制影響,夏時(shí)制會(huì)對(duì)日長(zhǎng)增加或減少一小時(shí)。因此,本地時(shí)間的計(jì)算是將時(shí)區(qū)偏移量加上 UTC,如有必要,再根據(jù)夏時(shí)制進(jìn)行調(diào)整。UTC 原點(diǎn)的時(shí)區(qū)偏移量為零。
UTC 時(shí)間適合于計(jì)算、比較日期和時(shí)間,以及將日期和時(shí)間存儲(chǔ)在文件中。本地時(shí)間適合于在桌面應(yīng)用程序的用戶界面中顯示。識(shí)別時(shí)區(qū)的應(yīng)用程序(如許多 Web 應(yīng)用程序)還需要使用許多其他時(shí)區(qū)。
如果 DateTime 對(duì)象的 Kind 屬性為 DateTimeKind..::.Unspecified,則其未指定表示的時(shí)間是本地時(shí)間、UTC 時(shí)間還是某個(gè)其他時(shí)區(qū)中的時(shí)間。
DateTime 運(yùn)算
使用 DateTime 結(jié)構(gòu)的計(jì)算(如 Add 或 Subtract)不會(huì)修改該結(jié)構(gòu)的值。相反,計(jì)算會(huì)返回新的 DateTime 結(jié)構(gòu),其值為計(jì)算結(jié)果。
| DateTime 對(duì)象的計(jì)算和比較僅當(dāng)這些對(duì)象表示同一時(shí)區(qū)中的時(shí)間時(shí)才有意義。 |
時(shí)區(qū)之間(例如,UTC 和本地時(shí)間之間,或者一個(gè)時(shí)區(qū)中的時(shí)間和本地時(shí)間之間)的轉(zhuǎn)換運(yùn)算會(huì)考慮本地時(shí)區(qū)的夏時(shí)制,但是算術(shù)和比較運(yùn)算不考慮。
DateTime 結(jié)構(gòu)本身不太支持從一個(gè)時(shí)區(qū)轉(zhuǎn)換至另一個(gè)時(shí)區(qū)。您可以使用 ToLocalTime 方法將 UTC 轉(zhuǎn)換為本地時(shí)間,也可以使用 ToUniversalTime 方法從本地時(shí)間轉(zhuǎn)換為 UTC。但是,整套的時(shí)區(qū)轉(zhuǎn)換方法是在 TimeZoneInfo 類(lèi)中提供的。使用這些方法,可以將世界上任一時(shí)區(qū)中的時(shí)間轉(zhuǎn)換為 UTC 或者本地時(shí)間。
每個(gè) DateTime 成員都隱式使用公歷執(zhí)行其操作,例外是指定日歷的構(gòu)造函數(shù)以及使用從 IFormatProvider 派生的參數(shù)(如 System.Globalization..::.DateTimeFormatInfo)的方法,該參數(shù)隱式指定日歷。
DateTime 類(lèi)型中的成員所執(zhí)行的運(yùn)算會(huì)考慮閏年和月中天數(shù)等細(xì)節(jié)。
DateTime 與 TimeSpan
DateTime 值類(lèi)型與 TimeSpan 值類(lèi)型的差異在于 DateTime 表示時(shí)間上的一刻,而 TimeSpan 表示時(shí)間間隔。例如,這意味著將 DateTime 的一個(gè)實(shí)例與另一個(gè)實(shí)例相減可以獲得表示這兩個(gè)實(shí)例之間的時(shí)間間隔的TimeSpan 對(duì)象?;蛘?#xff0c;將一個(gè)正 TimeSpan 與當(dāng)前 DateTime 相加可以獲得表示將來(lái)日期的 DateTime 值。
可以向 DateTime 對(duì)象增加或減少一個(gè)時(shí)間間隔。時(shí)間間隔可為負(fù),也可為正,可以用刻度或秒等為單位表示,也可表示為 TimeSpan 對(duì)象。
實(shí)現(xiàn)的接口
此類(lèi)型實(shí)現(xiàn) IComparable、IComparable<(Of <(T>)>)、IEquatable<(Of <(T>)>)、IFormattable 和IConvertible 接口。使用 Convert 類(lèi)進(jìn)行轉(zhuǎn)換,而不是使用此類(lèi)型的 IConvertible 顯式接口成員實(shí)現(xiàn)。
?示例下面的代碼示例演示如何大致比較等效的 DateTime 值,將它們聲明為“相等”時(shí)接受很小的差異。
C#?1using?System;
?2
?3class?Example
?4{
?5
?6???static?bool?RoughlyEquals(DateTime?time,?DateTime?timeWithWindow,?int?windowInSeconds,?int?frequencyInSeconds)
?7???{
?8
?9??????long?delta?=?(long)((TimeSpan)(timeWithWindow?-?time)).TotalSeconds?%?frequencyInSeconds;
10
11??????delta?=?delta?>?windowInSeconds???frequencyInSeconds?-?delta?:?delta;
12
13??????return?Math.Abs(delta)?<?windowInSeconds;
14
15???}
16
17???public?static?void?Demo(System.Windows.Controls.TextBlock?outputBlock)
18???{
19??????int?window?=?10;
20??????int?freq?=?60?*?60?*?2;?//?2?hours;
21
22??????DateTime?d1?=?DateTime.Now;
23
24??????DateTime?d2?=?d1.AddSeconds(2?*?window);
25??????DateTime?d3?=?d1.AddSeconds(-2?*?window);
26??????DateTime?d4?=?d1.AddSeconds(window?/?2);
27??????DateTime?d5?=?d1.AddSeconds(-window?/?2);
28
29??????DateTime?d6?=?(d1.AddHours(2)).AddSeconds(2?*?window);
30??????DateTime?d7?=?(d1.AddHours(2)).AddSeconds(-2?*?window);
31??????DateTime?d8?=?(d1.AddHours(2)).AddSeconds(window?/?2);
32??????DateTime?d9?=?(d1.AddHours(2)).AddSeconds(-window?/?2);
33
34??????outputBlock.Text?+=?String.Format("d1?~=?d1?[true]:?"?+?RoughlyEquals(d1,?d1,?window,?freq))?+?"\n";
35??????outputBlock.Text?+=?String.Format("d1?~=?d2?[false]:?"?+?RoughlyEquals(d1,?d2,?window,?freq))?+?"\n";
36??????outputBlock.Text?+=?String.Format("d1?~=?d3?[false]:?"?+?RoughlyEquals(d1,?d3,?window,?freq))?+?"\n";
37??????outputBlock.Text?+=?String.Format("d1?~=?d4?[true]:?"?+?RoughlyEquals(d1,?d4,?window,?freq))?+?"\n";
38??????outputBlock.Text?+=?String.Format("d1?~=?d5?[true]:?"?+?RoughlyEquals(d1,?d5,?window,?freq))?+?"\n";
39
40??????outputBlock.Text?+=?String.Format("d1?~=?d6?[false]:?"?+?RoughlyEquals(d1,?d6,?window,?freq))?+?"\n";
41??????outputBlock.Text?+=?String.Format("d1?~=?d7?[false]:?"?+?RoughlyEquals(d1,?d7,?window,?freq))?+?"\n";
42??????outputBlock.Text?+=?String.Format("d1?~=?d8?[true]:?"?+?RoughlyEquals(d1,?d8,?window,?freq))?+?"\n";
43??????outputBlock.Text?+=?String.Format("d1?~=?d9?[true]:?"?+?RoughlyEquals(d1,?d9,?window,?freq))?+?"\n";
44
45
46???}
47}
48 來(lái)自:http://msdn.microsoft.com/zh-cn/library/system.datetime(VS.95).aspx
轉(zhuǎn)載于:https://www.cnblogs.com/yefengmeander/archive/2011/09/26/2887672.html
總結(jié)
- 上一篇: 将DataTable 存到一个集合当中
- 下一篇: 物料分类新增更新