-1

大家好,我对 datetime 有一些疑问。

对于system.DateTime.Now返回当前本地日期。

下面的代码有助于获取当前的印度日期时间

Dim IndianTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")
Dim IndianDateTime = TimeZoneInfo.ConvertTime(USDateTime, IndianTimeZoneInfo)

但此时美国和英国等国家有不同的日期时间。我怎样才能用简单的代码来管理它?

上面代码的主要疑问是只有印度时间,但是如果我们想要美国或其他国家的时间,我们需要为不同的国家分开代码(如果是,那么我们写了很多代码,这很好吗?)?或有任何其他想法吗?

请给我建议。谢谢 !

编辑

简单我的问题是如何存储不同国家的当前日期时间?

4

2 回答 2

2

@RameshRajendran 这是一篇文章和文章中的一些代码,我确信这些代码不会完成您的项目。但希望它可以帮助您从不同的角度看待它。正如@varocarbas 指出的那样,创建一个表来存储最终编译的信息将为您提供很好的服务。

文章链接:http: //msdn.microsoft.com/en-us/library/vstudio/bb397781 (v=vs.110).aspx

您可以使用 SupportsDaylightSavingTime 属性查看时区是否有规则。

您还可以使用 Visual Studio 中的对象浏览器来查看 System.TimeZoneInfo 的成员。

我在控制器的索引 ActionResult 和索引视图中的 html 助手中使用以下内容对此进行了测试。再说一次,这只是为了帮助您了解自己的方式,超越您似乎不舒服的“大量工作”障碍。

我已经使用 c# 编写了这段代码,但我相信您在 VB 中创建等价物不会有任何问题。

[ 控制器 ]

// Sample code from the article.
// Note: the collection only contains full hour offsets (i.e. New Delhi is in a half hour zone)
ReadOnlyCollection<TimeZoneInfo> tzCollection;
tzCollection = TimeZoneInfo.GetSystemTimeZones();

foreach (TimeZoneInfo timeZone in tzCollection)
    {
        Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName);
    }

// My modified version of its use.
// this code will create a dropdownlist with all the timezones available on my machine.
var theTimesInfo = new List<TimeZoneInfo>(tzCollection);
var theZones = new SelectList(theTimesInfo, "Id", "DisplayName", 1);

ViewData["theZones"] = theZones;

string myLocalZone = "Eastern Standard Time";
TimeZoneInfo myLocalDateTime = TimeZoneInfo.FindSystemTimeZoneById(myLocalZone);

string theZoneSelected = Request.QueryString.Get("theZones");
if (theZoneSelected == string.Empty || theZoneSelected == null)
{
    theZoneSelected = myLocalZone;
}

TimeZoneInfo selectedTimeZone = TimeZoneInfo.FindSystemTimeZoneById(theZoneSelected);
DateTime CurrentTimeZoneDateAndTime = TimeZoneInfo.ConvertTime((DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified)), myLocalDateTime, selectedTimeZone);

ViewBag.CurrentTimeZoneSelected = selectedTimeZone.DisplayName.ToString();
ViewBag.CurrentDateTimeSelected = CurrentTimeZoneDateAndTime.ToString();

[更新] 编辑视图代码以显示返回的值。

[ 看法 ]

<p>
    The Select TimeZone is: @ViewBag.CurrentTimeZoneSelected<br />
    The current Date and Time for the Selected TimeZone is: @ViewBag.CurrentDateTimeSelected
</p>

<form>
    @Html.DropDownList("theZones", ViewData["theZones"] as SelectList)
    <input type="submit" name="submit" value="Select This Time Zone" />
</form>

您可以使用 foreach 循环遍历集合并将其添加到您的数据库表中。然后,如果需要,您可以将单个条目添加到表中,或根据需要调整 +-。

于 2013-09-29T15:18:07.387 回答
1

您可以使用 datetime.UtcNow 将时间保存为 UTC 时间。

您可以使用 TimeZoneInfo.ConvertTime 转换为另一个国家/地区的时区,就像您在示例中所做的那样,转换 Now 或 UtcNow 日期。

问题似乎是如何获取所有时区信息。您可以使用 GetSystemTimeZones 来做到这一点。官方时区名称在 timeZoneInfo.id 中。

Dim zones As System.Collections.ObjectModel.ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
Dim hSpan As TimeSpan

For Each zone As TimeZoneInfo In zones
  If InStr(LCase(zone.Id), "greenland") > 0 Then
    ' zone has the timezoneinfo for greenland.
    ' the following line assigns hSpan the difference between Greenland time and UTC.
    ' Be careful -- there may be more than one Greenland time. A combo box would be safer.
    hSpan = zone.GetUtcOffset(Now)
    exit for
  End If
Next zone

您可以在 Javascript 中获取客户端浏览器的当前时区偏移量,如下所示:

function GetClientUTC()
{
var now = new Date();
var offset = now.getTimezoneOffset();
}
于 2013-09-29T15:27:19.850 回答