Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the current day's hours and minutes in Swift?

Tags:

swift

nsdate

If I create a Date() to get the current date and time, I want to create a new date from that but with different hour, minute, and zero seconds, what's the easiest way to do it using Swift? I've been finding so many examples with 'getting' but not 'setting'.

like image 672
u84six Avatar asked Mar 17 '16 23:03

u84six


3 Answers

Be aware that for locales that uses Daylight Saving Times, on clock change days, some hours may not exist or they may occur twice. Both solutions below return a Date? and use force-unwrapping. You should handle possible nil in your app.

Swift 3, 4, 5 and iOS 8 / OS X 10.9 or later

let date = Calendar.current.date(bySettingHour: 9, minute: 30, second: 0, of: Date())! 

Swift 2

Use NSDateComponents / DateComponents:

let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! let now = NSDate() let components = gregorian.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: now)  // Change the time to 9:30:00 in your locale components.hour = 9 components.minute = 30 components.second = 0  let date = gregorian.dateFromComponents(components)! 

Note that if you call print(date), the printed time is in UTC. It's the same moment in time, just expressed in a different timezone from yours. Use a NSDateFormatter to convert it to your local time.

like image 177
Code Different Avatar answered Sep 20 '22 10:09

Code Different


swift 3 date extension with timezone

extension Date {     public func setTime(hour: Int, min: Int, sec: Int, timeZoneAbbrev: String = "UTC") -> Date? {         let x: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute, .second]         let cal = Calendar.current         var components = cal.dateComponents(x, from: self)          components.timeZone = TimeZone(abbreviation: timeZoneAbbrev)         components.hour = hour         components.minute = min         components.second = sec          return cal.date(from: components)     } } 
like image 27
RiceAndBytes Avatar answered Sep 19 '22 10:09

RiceAndBytes


//Increase the day & hours in Swift

let dateformat = DateFormatter()
let timeformat = DateFormatter()
        
dateformat.dateStyle = .medium
timeformat.timeStyle = .medium

//Increase Day

let currentdate = Date()

let currentdateshow = dateformat.string(from: currentdate)
textfield2.text = currentdateshow

let myCurrentdate = dateformat.date(from: dateTimeString)!
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: myCurrentdate) // Increase 1 Day

let tomorrowday = dateformat.string(from: tomorrow!)
text3.text = tomorrowday
text3.isEnabled = false
  
//increase Time  
    
let time = Date()

let currenttime = timeformat.string(from: time)
text4.text = currenttime
        
let mycurrenttime = timeformat.date(from: currenttime)!
let increasetime = Calendar.current.date(byAdding: .hour, value: 2, to: mycurrenttime) //increase 2 hrs.

let increasemytime = timeformat.string(from: increasetime!)
text5.text = increasemytime
like image 37
2 revs, 2 users 81% Avatar answered Sep 19 '22 10:09

2 revs, 2 users 81%