问题描述
我在快速格式化日期方面遇到问题4 下面提供了格式化源代码时HH:mm:ss收到错误数据的时间。
public delegate Task<int> PrintCaller([CallerMemberName] string Caller = null);
public class MyClass
{
public async Task<string> InitiateAPICallAsync(PrintCaller apiCall)
{
var response = await apiCall();
return "Test";
}
public async void MyFunc()
{
var helper = new APIHelper();
var str1 = await InitiateAPICallAsync(new PrintCaller(helper.GetData));
var str2 = await helper.GetData();
}
}
public class APIHelper
{
public async Task<int> GetData([CallerMemberName] string Caller = null)
{
if (Caller == "InitiateAPICallAsync")
{
// do some thing
}
else
{
//Show Warning
var dialog = new MessageDialog("Waring!!! Please don't call it directly");
await dialog.ShowAsync();
}
return 0;
}
}
我得到的结果是:2020年8月11日下午12:01:23
如果我尝试将字符串date的结果转换为date
let dateFormatter : DateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss a
let date = Date()
let dateString = dateFormatter.string(from: date)
我得到的结果是:2020-08-11 06:31:39 +0000
预计必须是2020-08-11 12:01:23 +0000
但是我得到的结果是:2020-08-11 06:31:39 +0000
解决方法
HH:mm:ss
为您提供24小时制的时间,因此a
在格式内没有意义。或者,您可以使用hh:mm:ss a
。
Date()
为您提供了UTC
中的时间。您需要提供时区信息以获取您所在时区的日期。
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss"
dateFormatter.timeZone = .current
let localDate = dateFormatter.string(from: date)
print(localDate)
localDate
将为您提供当前时区的日期。
问题出在您的格式中。如果尝试使用dateFormat = "dd-MMM-yyyy HH:mm:ss"
,则将获得预期的结果。另外,建议您设置区域设置和时区。例如:
let dateFormatter: DateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = NSTimeZone.local
dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss"
let date = Date()
let dateString = dateFormatter.string(from: date)
let serverDate: Date = dateFormatter.date(from: dateString)!