如何将DateTime
从DateTime.Now
返回的本地时区转换为Utc以外的其他时区。在桌面上我们有TimeZoneInfo.ConvertTimeBySystemTimeZoneId()
,但它在Windows手机上不可用!
这个java片段显示了我想要做的事情
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
TimeZone tz = TimeZone.getDefault();
format.setTimeZone(TimeZone.getTimeZone("GMT"));
str = format.format(new Date());
答案 0 :(得分:7)
使用系统库是不可能的,因为除了local和utc之外无法创建TimeZoneInfo
个对象。他们还有sealed班。
但是,您可以使用此简单库来启用到非本地时区的转换。 https://nuget.org/packages/WinRTTimeZones
像这样使用:
using TimeZones;
public void ConvertTime()
{
// Get the time zone we want
var tz = TimeZoneService.FindSystemTimeZoneById("Central Standard Time");
var dt = new DateTime(1990, 7, 1, 12, 0, 0, DateTimeKind.Utc);
// This time will be central time
var local = tz.ConvertTime(dt);
}
转换DateTime
后,您可以根据需要轻松进行格式化。我建议使用本地格式(而不是本地时区)格式化日期,以方便用户理解日期。
答案 1 :(得分:0)
像这样使用:
public String getNationTime(String Zone)
{
DateTime todayutc = DateTime.UtcNow;
string todaydate = todayutc.ToShortDateString();
string todaytime = todayutc.TimeOfDay.ToString().Split('.')[0];
Zone = Zone.Replace("GMT", "");
if (Zone.Length == 0)
return todaytime;
int zoneHour = int.Parse(Zone.Split(':')[0]);
int zoneMin = int.Parse(Zone.Split(':')[1]);
TimeSpan diff = new TimeSpan(zoneHour, zoneMin, 00);
todayutc = todayutc.Add(diff);
return todayutc.TimeOfDay.ToString().Split('.')[0];
}