如何将任何日期格式从ddMMMMYYYY(10Apr2018)转换为一种日期格式 [英] How to convert form any date format to one date format which is ddMMMMYYYY(10Apr2018)

查看:333
本文介绍了如何将任何日期格式从ddMMMMYYYY(10Apr2018)转换为一种日期格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从Google服务器上获得了不同类型的日期格式。为了方便起见,我想将所有这些日期格式转换为一种格式。以下是我得到回应的不同日期。

I'm getting different types of date formats from google servers. For my convenient i want convert all those date formats into one format. Here is below of different dates i'm getting in response.

17 Jun 14 12:26:20
Tue, 6 Mar 2018 05:16:51
8 Dec 2014 13:41:09 +0000
16 Sep 2014 16:08:47 -0400
29 Oct 2014 20:12:33 +0530
Tue, 8 Jul 2014 11:48:53 -0700
Tue, 03 Jun 2014 08:35:05 GMT
Tue, 03 Jun 2014 10:59:00 GMT
Wed, 04 Jun 2014 12:26:52 GMT
Wed, 7 Mar 2018 17:44:11 +0530
Wed, 07 Mar 2018 11:29:00 +0530
Thu, 8 May 2014 12:06:27 +0300 (EAT)
Tue, 13 Mar 2018 12:01:19 +0000 (UTC)
Mon, 19 Mar 2018 04:24:34 -0700 (PDT)
Sat, 24 May 2014 11:31:57 +0200 (CEST)
Wed, 02 Apr 2014 23:39:15 +0500 (GMT+05:00)

我如何将所有日期字符串转换为这种格式2015-09-07 05:42:23 +0000。

How can i convert all date strings into this format 2015-09-07 05:42:23 +0000. Thanks in advance.

我尝试过以下操作,但是在此日期它由于应用程序崩溃而取消了Nil-> Tue,8 Sep 2015 11 :28:17 +0580

I've tried like below it works fine but for this date it retunrs Nil due to that crash in app --> Tue, 8 Sep 2015 11:28:17 +0580 . it returns nil.

    struct RegexFormat {
    let pattern : String
    let dateFormat : String
}

let dateFormatter : DateFormatter = {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    return formatter
}()

let regexFormats = [RegexFormat(pattern:"\\w{3},\\s+\\d{1,2}\\s+\\w{3}\\s+\\d{4}\\s+\\d{1,2}:\\d{2}:\\d{2}\\s+[+-]\\d{4}", dateFormat:"E, dd MMM yyyy HH:mm:ss Z"),
                    RegexFormat(pattern:"\\w{3},\\s+\\d{1,2}\\s+\\w{3}\\s+\\d{4}\\s+\\d{1,2}:\\d{2}:\\d{2}\\s+\\w{3}", dateFormat:"E, dd MMM yyyy HH:mm:ss z"),
                    RegexFormat(pattern:"\\d{1,2}\\s+\\w{3}\\s+\\d{4}\\s+\\d{1,2}:\\d{2}:\\d{2}\\s+[+-]\\d{4}", dateFormat:"d MMM yyyy HH:mm:ss Z"),
                    RegexFormat(pattern:"\\d{1,2}\\s+\\w{3}\\s+\\d{2,4}\\s+\\d{1,2}:\\d{2}:\\d{2}", dateFormat:"dd MM yy HH:mm:ss")]

func dateConverterFromStringtoDate(from string : String) -> Date?
{
    for regexFormat in regexFormats {
        do {
            let regex = try NSRegularExpression(pattern: regexFormat.pattern)
            if let match = regex.firstMatch(in: string, range: NSRange(location: 0, length: string.utf16.count)) {
                let dateRange = Range(match.range, in: string)!
                dateFormatter.dateFormat = regexFormat.dateFormat
                return dateFormatter.date(from: String(string[dateRange]) )
            }
        } catch {
            continue
        }
    }
    return nil
}

我想将所有日期转换为这种格式。 2015-09-08 05:42:07 +0000

I want to convert all the dates into this format. 2015-09-08 05:42:07 +0000

@vadian请为上述问题提供答案。

@vadian please suggest answer for above issue.

推荐答案

您可以尝试以下操作:

    var dateStr = "\(element.value!)"
    
    var isWeekThere:Bool = false
    
    if dateStr.range(of:"Mon") != nil {
        isWeekThere = true
    }else  if dateStr.range(of:"Tue") != nil {
        isWeekThere = true
    }else  if dateStr.range(of:"Wed") != nil {
        isWeekThere = true
    }else  if dateStr.range(of:"Thu") != nil {
        isWeekThere = true
    }else  if dateStr.range(of:"Fri") != nil {
        isWeekThere = true
    }else  if dateStr.range(of:"Sat") != nil {
        isWeekThere = true
    }else  if dateStr.range(of:"Sun") != nil {
        isWeekThere = true
    }
    
    var format:String = String()
    dateStr = dateStr.replacingOccurrences(of: "\\s?\\(\\w+\\)", with: "", options: .regularExpression)
    let dateFormatter = DateFormatter()
    if isWeekThere == true{
        format = "E, d MMM yyyy HH:mm:ss Z"
    }else{
        format = "d MMM yyyy HH:mm:ss Z"
    }
    dateFormatter.dateFormat = format
    let date = dateFormatter.date(from: dateStr)
    print(date!)
    dateFormatter.dateFormat = "ddMMMMYYYY" // Any format you can pass here
    let convDate = dateFormatter.string(from: date!)
    print(convDate)

这是输出

如果使用某些不均匀格式崩溃了:

If it gets Crash with some Uneven format:

您可以使用

dateFormatter.dateFormat = "ddMMMMyyyy"

感谢 @vadian 提出建议

然后按以下方式使用:

let date = element.value! //Your response in date
print(date!)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "ddMMMMYYYY" // Any format you can pass here
let convDate = dateFormatter.string(from: date!)
print(convDate)

这篇关于如何将任何日期格式从ddMMMMYYYY(10Apr2018)转换为一种日期格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆