迅速格式化日期问题4

问题描述

我在快速格式化日期方面遇到问题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)!