c# 时间格式Mon Apr 28 2014 00:00:00 GMT 0800 (中国标准时间) 如何转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 时间格式Mon Apr 28 2014 00:00:00 GMT 0800 (中国标准时间) 如何转换相关的知识,希望对你有一定的参考价值。

转换成DATETIME 类型的

参考技术A Convert.ToDateTime("Mon Apr 28 2014 00:00:00 GMT 0800".Replace("GMT 0800",""))
GMT 0800 代表的是格林威治时间,在中国加8个小时就好了。本回答被提问者采纳
参考技术B DateTime ru;
DateTime.TryParse("Mon Apr 28 2014 00:00:00 GMT 0800", out ru);
Response.Write(ru);

如何将任何日期格式转换为一种日期格式,即 ddMMMMYYYY(10Apr2018)

【中文标题】如何将任何日期格式转换为一种日期格式,即 ddMMMMYYYY(10Apr2018)【英文标题】:How to convert form any date format to one date format which is ddMMMMYYYY(10Apr2018) 【发布时间】:2018-04-13 06:54:09 【问题描述】:

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

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。提前致谢。

我已经尝试过,如下所示,它工作正常,但在这个日期,由于应用程序崩溃,它返回 Nil --> Tue, 8 Sep 2015 11:28:17 +0580 。它返回 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:"\\w3,\\s+\\d1,2\\s+\\w3\\s+\\d4\\s+\\d1,2:\\d2:\\d2\\s+[+-]\\d4", dateFormat:"E, dd MMM yyyy HH:mm:ss Z"),
                    RegexFormat(pattern:"\\w3,\\s+\\d1,2\\s+\\w3\\s+\\d4\\s+\\d1,2:\\d2:\\d2\\s+\\w3", dateFormat:"E, dd MMM yyyy HH:mm:ss z"),
                    RegexFormat(pattern:"\\d1,2\\s+\\w3\\s+\\d4\\s+\\d1,2:\\d2:\\d2\\s+[+-]\\d4", dateFormat:"d MMM yyyy HH:mm:ss Z"),
                    RegexFormat(pattern:"\\d1,2\\s+\\w3\\s+\\d2,4\\s+\\d1,2:\\d2:\\d2", 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

@vadian 请就上述问题提出答案。

【问题讨论】:

What is the correct date.format for MMM dd, yyyy hh:mm:ss a? and how convert to dd-mm-yyyy HH:ii的可能重复 您正在获取日期格式或字符串的日期\..?? element.value.? 当您知道formats 时,那么问题是什么?使用DateFormatter 【参考方案1】:

你可以试试这个:

如果响应是具有两种不同日期格式的字符串格式:

    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)

这是输出

编辑

如果它因某种不均匀的格式而崩溃:

你可以使用

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)

【讨论】:

@IOSDeveloper 您能否指定您获得的所有格式列表。我可以试着为你做一个【参考方案2】:

到目前为止,答案都集中在获取正确的格式字符串以与 DateFormatter 一起使用,因为您的日期字符串有多种不同的格式,所以它有其局限性。

我提出另一种方法:使用NSDataDetectorNSRegularExpression 的子类)。这与 Apple 用于在电子邮件中突出显示日期或电话号码以实现用户交互的类相同。

let dateStrings = """
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)
""".components(separatedBy: "\n")

let types = NSTextCheckingResult.CheckingType.date.rawValue
let detector = try NSDataDetector(types: types)

var dates = [Date?]()
for str in dateStrings 
    let fullRange = NSRange(str.startIndex..., in: str)
    detector.enumerateMatches(in: str, options: [], range: fullRange)  result, flags, stop in
        if let result = result, result.resultType == .date 
            dates.append(result.date)
         else 
            dates.append(nil)
        
    

几个注意事项:

检测可能不确定。例如,“5 月 11 日”(没有年份)被解释为“当年的 5 月 11 日”。 像“5/11/2018”这样的模棱两可的字符串会根据设备的语言环境进行解释。 en-US 是 5 月 11 日; en-GB 现在是 11 月 5 日。

为了避免后续问题,假设日期和时间在设备的时区中。以第一个字符串为例:我在 EDT 时区,所以 12:26:20 EDT = 16:26:20 UTC。当您调用print(dates[0]!) 时,您将得到16:26:20,因为Date 始终以UTC 打印。

【讨论】:

以上是关于c# 时间格式Mon Apr 28 2014 00:00:00 GMT 0800 (中国标准时间) 如何转换的主要内容,如果未能解决你的问题,请参考以下文章

Date类型的Mon Oct 20 00:00:00 CST 2014怎么转换格式为yyyy-MM-dd

easyExcel 导出Excel,带时间的导出没有按数据库的格式呈现,如Mon Jun 01 00:00:00 CST 1964

C# 如何计算两个这个字符串格式的时间00:00:00的间隔

ActiveRecord Rails将created_at时间戳转换为查询所在的时区

通用自定义PHP日期格式

Python常用时间格式