+1

Tìm hiểu về lớp NSDate trong iOS

I. Giới thiệu

NSDate là một class được các lập trình viên sử dụng rất nhiều khi viết ứng dụng để làm việc với các dữ liệu date time. Được Apple giới thiệu từ những ngày đầu tiên hệ điều hành iOS ra đời, NSDate là class không thể thiếu trong khi lập trình, bởi tất cả các ứng dụng dù lớn hay nhỏ đều ít nhiều liên quan đến việc sử dụng ngày tháng hoặc thời gian.

Khi làm việc với dữ liệu thời gian trong iOS, từ những việc đơn giản như format thời gian sang kiểu String, tới những việc phức tạp như so sánh, tính toán các giá trị thời gian với nhau, mọi công việc điều được thực hiện với NSDate và các lớp tiện ích của NSDate.

Những việc thông thường lập trình viên phải làm với dữ liệu thời gian là:

  • tạo một string từ đối tượng NSDate với một format ngày tháng nhất định
  • So sánh thời gian, ngày tháng của các đối tượng NSDate
  • Tính toán thời gian giữa 2 đối tượng NSDate
  • Tách NSDate ra thành các thành phần: ngày, tháng, năm, giờ, phút, giây,...
  • ...

Đối với những người mới làm quen với iOS, việc sử dụng NSDate có thể là một việc khá rắc rối. Nhưng để nắm bắt được NSDate là một việc không hề khó khăn, chỉ cần hiểu về lớp NSDate, chúng ta sẽ thấy NSDate là một lớp rất tuyệt vời, nó hỗ trợ lập trình viên rất nhiều hàm tiện ích để chúng ta làm việc với dữ liệu ngày tháng một cách đơn giản và dễ dàng

Trong bài này, tôi xin giới thiệu đến bạn đọc lớp NSDate và các lớp tiện ích liên quan, những công việc NSDate có thể làm mà các lập trình viên hay dùng.

II. Cách dùng NSDate

1. Những khái niệm cơ bản về NSDate

Trước tiên, chúng ta cần nói về bản thân lớp NSDate. Lớp NSDate là lớp bao gồm thời gian và ngày tháng, NSDate chứa thông tin đồng thời cả ngày tháng và thời gian. Điều này có nghĩa là khi chúng ta làm việc với hoặc thời gian, hoặc ngày tháng, hoặc cả 2, chúng ta cần làm việc với NSDate. hãy tưởng tượng rằng ngày tháng và thời gian là các thuộc tính của NSDate.

Khái niệm format thời gian không được sử dụng lên bản thân NSDate. Ví dụ, khi muốn format thời gian để hiển thị ra màn hình, chúng ta tạo format cho string hiển thị, nhưng format đó chỉ ảnh hưởng đến string đó mà không ảnh hưởng đến đối tượng NSDate

2. Chuyển đổi qua lại giữa NSDate và String

a. Tạo String từ NSDate

Để tạo một string từ đối tượng NSDate, chúng ta sử dụng lớp NSDateFormatter để format việc hiển thị thời gian về một format nhất định

let dateFormatter = NSDateFormatter()

set location cho đối tượng NSDateFormatter (mặc định đối tượng NSDateFormatter sẽ lấy location hiện tại của thiết bị khi không được gán giá trị)

dateFormatter.locale = NSLocale(localeIdentifier: "el_GR")

Sử dụng date formatter styles để format output string

Trong iOS, hệ điều hành đã cung cấp cho chúng ta một số style khác nhau để sử dụng cho NSDateFormatter thông qua Enum NSDateFormatterStyle.

NSDateFormatterStyle có thể nhận các giá trị: case NoStyle, ShortStyle, MediumStyle, LongStyle, FullStyle

dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle

Khi được set location và style, Date formater sẽ format ngày tháng theo location và style như chúng ta muốn. Ví dụ đoạn code sau:

let currentDate = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.dateStyle = NSDateFormatterStyle.FullStyle
var convertedDate = dateFormatter.stringFromDate(currentDate)
print(convertedDate)

Output:

Sunday, November 22, 2015

Format output string tùy ý

Khi sử dụng NSDateFormatterStyle ở trên, chúng ta không thể thay đổi format của output theo ý muốn của mình. Vì thế, lớp NSDateFormatter cung cấp cho chúng ta khả năng tự tạo Format cho output theo tùy ý muốn của lập trình viên.

Việc sử dụng custom format rất đơn giản, chúng ta chỉ cần cung cấp cho NSDateFormatter một format đúng. Để format đúng, chúng ta cần biết về những ký hiệu sau:

  • EEEE: tên đầy đủ của ngày trong tuần (monday, tuesday,...). khi muốn sử dụng viết tắt của ngày, chúng ta sử dụng 1-3 ký tự (ví dụ: EEE sẽ hiển thị mon, tue,...)
  • MMMM: tên đầy đủ của tháng (october, november,...). Tương tự, chúng ta sử dụng 1-3 ký tự để hiển thị tháng viết tắt
  • dd: ngày của tháng (08, 13, 25,...)
  • yyyy: hiển thị năm với 4 chữ số (1990, 2015,...)
  • HH: hiển thị giờ với 2 chữ số
  • mm: hiển thị phút với 2 chữ số
  • ss: hiển thị giây với 2 chữ số
  • zzz: hiển thị timezone với 3 chữ cái (GMT,...)
  • GGG: hiển thị trước hoặc sau công nguyên (BC, AD)

Ví dụ, để format giống với NSDateFormatterStyle.FullStyle ở ví dụ bên trên, chúng ta làm như sau:

let currentDate = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy"
var convertedDate = dateFormatter.stringFromDate(currentDate)
print(convertedDate)

trong ví dụ này, out của chúng ta so với ví dụ bên trên là không đổi như sau:

Output:

Sunday, November 22, 2015

Ví dụ date format có cả thời gian và ngày tháng như sau:

let currentDate = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy HH:mm"
var convertedDate = dateFormatter.stringFromDate(currentDate)
print(convertedDate)

Kết quả:

22/11/2015 18:23

b. Tạo NSDate từ String

Trong lớp NSDateFormatter, chúng ta có hàm dateFromString() để tạo đối tượng NSDate từ 1 date String cho trước. Để có thể convert được từ String sang NSDate, chúng ta cần cung cấp cho đối tượng NSDateFormatter dateFormat của String đó. Ví dụ:

let dateString = "Sun, 22 Nov 2015 18:25:44 GMT"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
let newDate = dateFormatter.dateFromString(dateAsString)

Trong ví dụ trên, chúng ta sẽ tạo được ra 1 đối tượng NSDate với các thông tin về ngày tháng, thời gian ứng với string dateString

Chú ý, khi chuyển từ string về NSDate, chúng ta có thể nhận được thời gian khác với thời gian trong string. Điều này là bình thường vì trong chuỗi dateString ở trên, chúng ta lấy timeZone là GMT, trong khi đó máy của chúng ta thường để timezone là timeZone của chúng ta

3. Sử dụng NSDateComponents

Trong khi lập trình, có nhiều lúc lập trình viên chỉ muốn lấy ra giá trị của một phần của NSDate như ngày, tháng hoặc giờ, phút. Để làm được việc này, chúng ta cần sử dụng lớp NSDateComponents

Khi muốn chuyển đổi giữa NSDate và NSDateComponents, chúng ta cần sử dụng thêm lớp NSCalendar. Lớp NSCalendar là lớp thực hiện việc biến đổi từ NSDate thành NSDateComponents và ngược lại

a. Tạo đối tượng NSDateComponents từ đối tượng NSDate

Để cho dễ hình dung việc tạo NSDateComponents từ NSDate, chúng ta hãy nhìn vào ví dụ sau:

// 1
let currentDate = NSDate()
// 2
let calendar = NSCalendar.currentCalendar()
// 3
let dateComponents = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year, NSCalendarUnit.WeekOfYear, NSCalendarUnit.Hour, NSCalendarUnit.Minute, NSCalendarUnit.Second, NSCalendarUnit.Nanosecond], fromDate: currentDate)
// 4
print("day = \(dateComponents.day)", "month = \(dateComponents.month)", "year = \(dateComponents.year)", "week of year = \(dateComponents.weekOfYear)", "hour = \(dateComponents.hour)", "minute = \(dateComponents.minute)", "second = \(dateComponents.second)", "nanosecond = \(dateComponents.nanosecond)" , separator: ", ", terminator: "")

Trong ví dụ trên:

  • 1: tạo đối tượng NSDate là thời gian hiện tại của thiết bị
  • 2: tạo đối tượng NSCalendar là calendar hiện tại
  • 3: tạo đối tượng NSDateComponents. Như chúng ta thấy trong đoạn code ví dụ, chúng ta sử dụng hàm components(_:fromDate:) của lớp NSCalendar để tạo NSDateComponents từ NSDate.
  • 4: In các thành phần của NSDateComponents ra log

Output:

day = 22, month = 11, year = 2015, week of year = 48, hour = 19, minute = 14, second = 43, nanosecond = 105728536

Trong hàm components(_:fromDate:) của lớp NSCalendar, chúng ta truyền vào 2 tham số, tham số thứ nhất là một mảng các phần tử của NSCalendarUnit và tham số thứ 2 là một đối tượng của NSDate. Ở đây, NSCalendarUnit là 1 struct, các bạn có thể xem tất cả các thuộc tính của Struct NSCalendarUnit tại đây. Trong ví dụ ở trên, tôi đã dùng những thuộc tính cơ bản hay được sử dụng khi làm việc với NSDate:

  • day
  • month
  • year
  • weak of year
  • hour
  • minute
  • second
  • nanosecond

Chú ý: đối với các thuộc tính của NSCalendarUnit chúng ta không truyền vào cho hàm components(_:fromDate:), thì chúng ta không thể gọi thuốc tính đấy của lớp NSDateComponents.

ví dụ, trong ví dụ trên tôi không truyền thuộc tính NSCalendarUnit.TimeZone cho hàm components, vì thế nên đối tượng dateComponents được tạo ra sẽ không có dateComponents.timeZone dù giá trị của timeZone có tồn tại trong đối tượng currentDate

b. Tạo đối tượng NSDate từ NSDateComponents

Ngược lại với việc tạo NSDateComponents từ NSDate, khi muốn tạo NSDate từ NSDateComponents, chúng ta cần có đối tượng NSDateComponents. Sau đó, tương tự như trên, chúng ta sử dụng hàm dateFromComponents(_😃 của lớp NSCalendar để tạo đối tượng NSDate

Ví dụ:

let components = NSDateComponents()
components.day = 22
components.month = 11
components.year = 2015
components.hour = 20
components.minute = 30
let newDate = calendar.dateFromComponents(components)

Output:

Nov 22, 2015, 8:30 PM

Tương tự việc tạo NSDate từ string, khi chúng ta tạo đối tượng NSDate từ các components, đối tượng này sẽ lấy giá trị timeZone mặc định của device. Khi chúng ta truyền giá trị timeZone cho components, thời gian của chúng ta sẽ bị sai khác đi do phải chuyển timeZone từ timeZone của components về timeZone hiện tại của device

Ví dụ, khi chúng ta thêm timeZone cho components ở đoạn code trên:

components.timeZone = NSTimeZone(abbreviation: "GMT")
let newDate = calendar.dateFromComponents(components)

Do timeZone của Việt Nam lệch với GMT là +7h, Output của chúng ta sẽ là:

Nov 23, 2015, 3:30 AM

Danh sách viết tắt của các múi giờ các bạn có thể tham khảo tại đây

4. So sánh thời gian

So sánh thời gian cũng là một việc thường xuyên sảy ra khi các lập trình viên viết ứng dụng, để xác định thời gian nào sớm hơn, muộn hơn, hoặc so sánh 2 thời gian có bằng nhau hay không.

Có nhiều cách để so sánh thời gian, trong bài viết này, tôi xin đưa ra 3 cách để so sánh 2 mốc thời gian với nhau, tùy trường hợp sử dụng mà chúng ta sẽ quyết định chọn việc sử dụng cách so sánh nào cho phù hợp với hoàn cảnh cụ thể.

Cách 1: sử dụng hàm earlierDate() hoặc laterDate()

Ví dụ:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy zzz"

let dateString1 = "Nov 18, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateString1)!

let dateString2 = "Nov 24, 2015 GMT"
var date2 = dateFormatter.dateFromString(dateString2)!

let earlierDate = date1.earlierDate(date2)

Trong ví dụ trên, kết quả trả về của hàm earlierDate() là 1 đối tượng NSDate. Nguyên tắc so sánh của hàm này là:

  • nếu date1 là sớm hơn date2, trả về giá trị của date1
  • nếu date2 là sớm hơn date1, trả về giá trị của date2
  • nếu date1 và date2 bằng nhau, trả về giá trị của date1

Do đó, đối tượng earlierDate sẽ nhận giá trị của date1

Tương tự, nguyên tắc sử dụng hàm laterDate() cũng giống với hàm earlierDate()

let laterDate = date1.laterDate(date2)
print(laterDate)

Output:

2015-11-24 00:00:00 +0000

Cách 2: sử dụng hàm compare() và NSComparisonResult enum

Ví dụ:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy zzz"

let dateString1 = "Nov 18, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateString1)!

let dateString2 = "Nov 24, 2015 GMT"
var date2 = dateFormatter.dateFromString(dateString2)!

if date1.compare(date2) == NSComparisonResult.OrderedDescending {
    print("Date1 is Later than Date2")
}
else if date1.compare(date2) == NSComparisonResult.OrderedAscending {
    print("Date1 is Earlier than Date2")
}
else if date1.compare(date2) == NSComparisonResult.OrderedSame {
    print("Date1 and Date2 are the same dates")
}

Output:

Date1 is Earlier than Date2

Từ ví dụ trên ta thấy, để so sánh date1 và date2, chúng ta dùng hàm compare() và NSComparisonResult enum để xác định. Ví dụ trên đã rất rõ ràng về cách so sánh này, tôi xin không nói thêm về cách so sánh này nữa

Cách 3: sử dụng time intervals để so sánh NSDate

Cách này cũng gần tương tự như cách so sánh thứ 2, thay vì dùng hàm compare() và NSComparisonResult để so sánh 2 đối tượng NSDate, chúng ta sử dụng timeIntervals để biến đổi 2 đối tượng NSDate về giá trị có thể so sánh, rồi so sánh 2 giá trị đó. Ví dụ:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy zzz"

let dateString1 = "Nov 18, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateString1)!

let dateString2 = "Nov 24, 2015 GMT"
var date2 = dateFormatter.dateFromString(dateString2)!

if date1.timeIntervalSinceReferenceDate > date2.timeIntervalSinceReferenceDate {
    print("Date1 is Later than Date2")
}
else if date1.timeIntervalSinceReferenceDate <  date2.timeIntervalSinceReferenceDate {
    print("Date1 is Earlier than Date2")
}
else {
    print("Date1 and Date2 are the same dates")
}

5. Thêm, bớt thời gian vào NSDate

Việc thêm bớt thời gian cho đối tượng NSDate là một việc khá thú vị và không hề khó. Trong bài này, tôi sẽ nói về việc thêm thời gian, việc bớt thời gian đơn giản chỉ là việc thêm 1 số âm thời gian mà thôi.

Khi muốn cộng thêm thời gian vào một đối tượng NSDate (ví dụ, chúng ta có thể muốn cộng thêm 2 tháng vào đối tượng NSDate hiện tại), chúng ta có 3 cách để thêm.

Cách 1: sử dụng NSCalendarUnit

Phần trên, chúng ta đã biết cách tạo NSDate sử dụng NSCalendarUnit, NSCalendarUnit cũng có thể sử dụng để thêm các unit vào đối tượng NSDate đã có. Ví dụ:

let currentDate = NSDate()
print("currentDate: \(currentDate)")

let monthsToAdd = 1
let daysToAdd = 5

var calculatedDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.Month, value: monthsToAdd, toDate: currentDate, options: NSCalendarOptions.init(rawValue: 0))
print("currentDate add \(monthsToAdd) month: \(currentDate)")

calculatedDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.Day, value: daysToAdd, toDate: calculatedDate!, options: NSCalendarOptions.init(rawValue: 0))
print("currentDate add \(monthsToAdd) month and \(daysToAdd) days: \(currentDate)")

Output:

currentDate: 2015-11-22 21:12:04 +0000

currentDate add 1 month: 2015-12-22 21:12:04 +0000

currentDate add 1 month and 5 days: 2015-12-27 21:12:04 +0000

Như các bạn thấy trong ví dụ trên, để thêm unit cho NSDate, chúng ta sử dụng hàm dateByAddingUnit() với các param truyền vào là thuộc tính của struct NSCalendarUnit để xác định unit cần thêm(ngày, tháng,...), số lượng thêm, đối tượng NSDate cần thêm và option khi thêm

Cách 2: sử dụng NSDateComponents

Tương tự NSCalendarUnit, ngoài tạo đối tượng NSDate mới, lớp NSDateComponents cũng có thể được sử dụng khi chúng ta muốn thêm bớt 1 lượng thời gian vào đối tượng NSDate đã có. Xét ví dụ sau:

let currentDate = NSDate()
print("currentDate: \(currentDate)")

let monthsToAdd = 1
let daysToAdd = 5

let newDateComponents = NSDateComponents()
newDateComponents.month = monthsToAdd
newDateComponents.day = daysToAdd

let calculatedDate = NSCalendar.currentCalendar().dateByAddingComponents(newDateComponents, toDate: currentDate, options: NSCalendarOptions.init(rawValue: 0))
print("calculatedDate: \(calculatedDate)")

Output:

currentDate: 2015-11-22 21:12:04 +0000

calculatedDate: 2015-12-27 21:12:04 +0000

Trong ví dụ trên, chúng ta thấy, để thêm 1 lượng thời gian vào đối tượng NSDate, chúng ta tạo một đối tượng NSDateComponents với lượng thời gian cần thêm, và dùng hàm dateByAddingComponents() của lớp NSCalendar để thêm lượng thời gian này vào đối tượng NSDate. Trong hàm dateByAddingComponents(), chúng ta truyền vào giá trị của components cần thêm và đối tượng NSDate muốn thêm.

Cách 3: sử dụng TimeInterval (không khuyến khích dùng)

Với cách thứ 3 này, chúng ta sẽ thêm 1 khoảng thời gian(1 số lượng giây nhất định) vào đối tượng NSDate. Nguyên nhân của việc không khuyến khích dùng cách này là bởi vì khi chúng ta thêm thời gian bằng cách này, chúng ta có thể bị sai thời gian. năm nhuận, giây nhuận,... đều có thể dẫn đến việc sai thời gian khi chúng ta thêm cách này

Để thêm thời gian theo cách này, chúng ta xét ví dụ sau:

let currentDate = NSDate()
print("currentDate: \(currentDate)")

let hoursToAddInSeconds: NSTimeInterval = 120 * 60 // 2h in seconds
let calculatedDate = currentDate.dateByAddingTimeInterval(hoursToAddInSeconds)
print("calculatedDate: \(calculatedDate)")

Output:

currentDate: 2015-11-22 21:12:04 +0000

calculatedDate: 2015-11-22 23:12:04 +0000

Ở đây, chúng ta không cần sử dụng hàm của lớp NSCalendar mà sử dụng luôn hàm dateByAddingTimeInterval của lớp NSDate. Tuy nhiên, lưu ý thêm 1 lần nữa, cách thêm thời gian này không an toàn như 2 cách bên trên.

6. Tính toán sự khác nhau giữa 2 đối tượng NSDate

Trong nhiều trường hợp, lập trình viên không chỉ cần biết date1 hay date2 lớn hơn, mà còn cần biết lượng lớn hơn đó là bao nhiêu ngày, bao nhiêu giờ, bao nhiêu năm. Khi sử dụng NSDate, việc tính toán sự khác biệt giữa các đối tượng thời gian này là không hề khó. Tương tự với các vấn đề bên trên, tôi cũng xin đưa ra 3 cách để tính toán sự khác nhau này.

Cách 1: sử dụng NSDateComponents và NSCalendarUnit

Lớp NSCalendar cung cấp cho chúng ta hàm componnents( : fromDate: toDate: Options:) rất tiện lợi để chúng ta có thể tính toán sự khác nhau giữa 2 đối tượng NSDate. Xét ví dụ sau:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy zzz"

let dateString1 = "Nov 18, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateString1)!

let dateString2 = "Nov 24, 2015 GMT"
var date2 = dateFormatter.dateFromString(dateString2)!

var diffDateComponents = NSCalendar.currentCalendar().components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute, NSCalendarUnit.Second], fromDate: date1, toDate: date2, options: NSCalendarOptions.init(rawValue: 0))

print("The difference between dates is: \(diffDateComponents.year) years, \(diffDateComponents.month) months, \(diffDateComponents.day) days")

Output:

The difference between dates is: 0 years, 0 months, 6 days

Cách 2: sử dụng timeIntervalSinceDate

Chúng ta sử dụng hàm timeIntervalSinceDate() của lớp NSDate để tính toán lượng thời gian khác nhau của 2 đối tượng NSDate, rồi dùng lớp NSDateComponentsFormatter để convert lượng thời gian đó về dạng ngày tháng.

Ví dụ:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy zzz"

let dateString1 = "Nov 18, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateString1)!

let dateString2 = "Nov 24, 2015 GMT"
var date2 = dateFormatter.dateFromString(dateString2)!

let dateComponentsFormatter = NSDateComponentsFormatter()
dateComponentsFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Full

let interval = date2.timeIntervalSinceDate(date1)
let diffDate = dateComponentsFormatter.stringFromTimeInterval(interval)
print("the difference between dates is: \(diffDate)")

Output:

The difference between dates is: 0 years, 0 months, 6 days, 0 hours, 0 minutes, 0 seconds

Cách 3: sử dụng lớp NSDateComponentsFormatter với hàm stringFromDate( toDate:)

Ví dụ:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy zzz"

let dateString1 = "Nov 18, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateString1)!

let dateString2 = "Nov 24, 2015 GMT"
var date2 = dateFormatter.dateFromString(dateString2)!

let dateComponentsFormatter = NSDateComponentsFormatter()
dateComponentsFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Full
dateComponentsFormatter.allowedUnits = [NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute, NSCalendarUnit.Second]

let autoFormattedDifference = dateComponentsFormatter.stringFromDate(date1, toDate: date2)

print("The difference between dates is: \(autoFormattedDifference)")

Output:

The difference between dates is: 0 years, 0 months, 6 days, 0 hours, 0 minutes, 0 seconds

Như chúng ta thấy trong ví dụ trên, đối tượng dateComponentsFormatter được sét thuộc tính allowedUnits là mảng các phần tử của struct NSCalendarUnit. Để tính khoảng thời gian khác nhau giữa 2 đối tượng date1, date2, chúng ta sử dụng hàm stringFromDate( todate:) để tính toán.

III. Kết luận

Qua bài viết này, tôi đã giới thiệu đến các bạn những khái niệm và cách dùng cơ bản của lớp NSDate, một lớp rất quan trọng của iOS mà trong khi lập trình, mọi lập trình viên đều phải làm việc với lớp này dù ít hay nhiều. Hi vọng thông qua bài viết này, tôi có thể giúp các bạn mới làm quen với lập trình iOS thêm một ít thông tin để tìm hiểu về lớp NSDate và cách sử dụng các hàm tiện ích của các lớp liên quan đến NSDate.

Cuối cùng, tôi xin cảm ơn các bạn đã theo dõi bài viết này !!!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí