Search code examples
iosswiftdatensdatensdateformatter

How to know Date format getting from sever


I am trying to get date format of a date that I am getting from server.

What will be the format of this date:

2021-10-14T17:53:03.753588+05:30

What I tried:

yyyy-MM-dd'T'HH:mm:ssXXX 

But Its not working.


Solution

  • How to (my tips & steps):

    When you are struggling to find the date format for String -> Date ask you this: What my format is really doing? What's it's parsing/interpreting? Just let's see with Date -> String...

    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXX"
    print(formatter.string(from: Date()))
    

    Output: 2021-10-14T13:06:38+02:00: Is it the "same" as the string we have? No, some are the same, but not all...

    Let's continue with another tip:

    Let's put our format and the string one above the other one:

    2021-10-14T17:53:03.753588+05:30
    yyyy-MM-dd'T'HH:mm:ssXXX
    

    Then, let's add "spaces", to make each pattern match its corresponding input:

    2021-10-14  T  17:53:03.753588 +05:30
    yyyy-MM-dd 'T' HH:mm:ss          XXX
    

    Then, let's check the doc (it's bookmarked in my web browser) for interpretation of the pattern and check if they correspond if needed, and to find the missing one if needed too.

    Ok, so we aren't interpreting .753588 at all, that's why it's failing... It's for the fractional seconds, so if we change the format to: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", it should work. Note, you can replace XXX with Z if you want...

    Now, remember that patterns are case sensitive, so if you have strange hours, minutes, or nil because of that, check if you didn't misuse minutes vs month, 12h format vs 24 hour format...
    If you have hours diff (or usually 30min diff), the issue could be then a timezone issue.
    If you have a day diff, it could also be a timezone issue (interpret it as hours diffs around midnight, so there is a day change). If you have a year diff, check if you didn't misuse yyyy vs YYYY.

    Etc. But that should cover most of your cases (basic issues).