【发布时间】:2018-07-02 17:58:43
【问题描述】:
我就是想不通……该死!请看第二个代码sn-p中的调用方法。您将看到一条注释掉的行,内容为 //_time = time.ToUTCString(); 转到第一个代码 sn-p 以查看方法 ToUTCString()。您可以看到它采用日期时间,将其转换为世界时间并减去 UnixEpoch 以获得 TotalSeconds。然后将该值转换为 Int64(),最后转换为字符串。我尝试调用方法 ToLocalString 但这也改变了日期。
我传入的日期是我想要转换为 Int64 并最终转换为字符串的日期。我传入的日期时间。没有改变。
我不想更改传入的日期。我总是传入从上午 12:00:00(或 00:00:00)开始的日期,这是我一直想要的时间。 这两种方法都会更改日期和/或时间。我输入的日期是 06/01/2017 12:00:00AM 但有时它会更改为 05/31/2017 04:00:00 或保留日期,但时间不对。 Dark Sky 要求日期为 Convert.ToInt64(milliseconds) 的值,然后转换为字符串。
有谁知道如何以毫秒为单位将传入的确切日期和时间转换为 Int64?
我有以下扩展类:
public static class Extensions
{
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static DateTime ToDateTime(this Int64 _input)
{
return UnixEpoch.AddSeconds(_input);
}
public static string ToLocalString(this DateTime _input)
{
// _input = {6/1/2017 12:00:00 AM} System.DateTime
var milliseconds = _input.ToLocalTime().Subtract(UnixEpoch).TotalSeconds;
return Convert.ToInt64(milliseconds).ToString();
// I want to get the milliseconds for {6/1/2017 12:00:00 AM}
// I don't want the date or time to change
}
public static string ToUTCString(this DateTime _input)
{
// _input = {6/1/2017 12:00:00 AM} System.DateTime
var milliseconds = _input.ToUniversalTime().Subtract(UnixEpoch).TotalSeconds;
return Convert.ToInt64(milliseconds).ToString();
// I want to get the milliseconds for {6/1/2017 12:00:00 AM}
// I don't want the date or time to change
}
}
这是调用方法:
public ForecastIORequest(string apiKey, float latF, float longF, DateTime time, Unit unit, Language? lang = null, Extend[] extend = null, Exclude[] exclude = null)
{
_apiKey = apiKey;
_latitude = latF.ToString(CultureInfo.InvariantCulture);
_longitude = longF.ToString(CultureInfo.InvariantCulture);
//_time = time.ToUTCString();
_time = time.ToLocalString();
//DateTime t = _time.
_unit = Enum.GetName(typeof(Unit), unit);
_extend = (extend != null) ? RequestHelpers.FormatExtendString(extend) : "";
_exclude = (exclude != null) ? RequestHelpers.FormatExcludeString(exclude) : "";
_lang = (lang != null) ? RequestHelpers.FormatLanguageEnum(lang) : Language.en.ToString();
}
【问题讨论】:
-
如果你不想要UTC,那么不要设置
DateTimeKind.UTC。 -
我需要一个类似于第一个 sn-p 中的方法,我可以在我的日期时间中发送并以相同的格式返回它。 Convert.ToInt64(毫秒).ToString()
-
我不太确定你的问题是什么。请发布一个明确的问题,说明您到底想要达到什么目标,什么是行不通的。
-
如果您将实际输入与预期输出和当前输出包括在内,您的问题会更清楚。我也没有读到哪些方法给您带来了问题,所有 3 种方法似乎都是相互依赖的,因此可能有自己的问题/行为(可能没有常见的错误)。
-
这可能很有趣msdn.microsoft.com/en-us/library/… (注意有一个相应的版本返回毫秒,以及以相反方向操作的方法)