1

All,

I have a date format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" and I need to set the millisecond value, but date component does not provide millisecond attribute.

Below is my code for setting custom values in hour, minute, second. I also need to set millisecond to 0/999 value.

static func getToadyStartInUTC() -> String{
    let todaydate = Date()
    let formatter = DateFormatter()
    
    var components = Calendar.current.dateComponents([.year, .month, .day, .hour], from: todaydate)
    components.hour = 0
    components.minute = 0
    components.second = 0

    let calendar = Calendar.current
    let startDate = calendar.date(from: components)!
    
    print("\(startDate)")
    
    formatter.timeZone = TimeZone(identifier: "UTC")
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
   return formatter.string(from: startDate)
}

How can I set the millisecond value in date component?

Phil Dukhov
  • 67,741
  • 15
  • 184
  • 220
Ravi
  • 881
  • 1
  • 9
  • 23

2 Answers2

0

An alternative solution with Calendar API to get startDate and ISO8601DateFormatter

static func getToadyStartInUTC() -> String {
    let todaydate = Date()
    var calendar = Calendar.current
    let timeZone = TimeZone(secondsFromGMT: 0)!
    calendar.timeZone = timeZone

    let startDate = calendar.startOfDay(for: todaydate)
    var components = calendar.dateComponents(in: timeZone, from: startDate)
    components.nanosecond = 999000000

    let formatter = ISO8601DateFormatter()
    formatter.formatOptions.insert(.withFractionalSeconds)
    return formatter.string(from: components.date!)
}
vadian
  • 274,689
  • 30
  • 353
  • 361
0
let todaydate = Date()
    var calendar = Calendar.current
     
    calendar.timeZone = TimeZone(identifier: "UTC")


    let startDate = calendar.startOfDay(for: todaydate)
    var components = calendar.dateComponents(in: timeZone, from: startDate)
    components.nanosecond = 999000000

    let formatter = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

   
     formatter.string(from: components.date!)
Apps Maven
  • 1,314
  • 1
  • 4
  • 17