大家好,我对datetime有一些疑问。
system.DateTime.Now
是返回当前本地日期。
以下代码有助于获取当前的印度日期时间
Dim IndianTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")
Dim IndianDateTime = TimeZoneInfo.ConvertTime(USDateTime, IndianTimeZoneInfo)
但此时美国和英国等国家的日期时间不同。我如何用简单的代码管理它?
上述代码的主要疑问仅限印度时间,但如果我们想要美国或其他国家/地区的时间,我们需要为不同国家/地区分开代码(如果是,那么我们会编写很多代码,这很好吗?) ?还是其他任何想法?
请指教。谢谢!
修改:
简单的问题是如何存储不同国家/地区的当前日期时间?
答案 0 :(得分: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循环遍历集合并将其添加到db表中。 然后,如果需要,可以在表格中添加单个条目,或根据需要调整+ - 。
答案 1 :(得分: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();
}