Nhận NSDate hiện tại ở định dạng dấu thời gian


83

Tôi có một phương thức cơ bản lấy thời gian hiện tại và đặt nó trong một chuỗi. Tuy nhiên, làm cách nào để tôi có thể định dạng ngày và giờ hiện tại ở định dạng dấu thời gian UNIX kể từ năm 1970?

Đây là mã của tôi:

NSDate *currentTime = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh-mm"];
NSString *resultString = [dateFormatter stringFromDate: currentTime];

Có thể sử dụng NSDateFormatterđể thay đổi 'resultString' thành dấu thời gian không?

Câu trả lời:


216

Đây là những gì tôi sử dụng:

NSString * timestamp = [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];

(nhân 1000 cho mili giây, nếu không, hãy lấy nó ra)

Nếu bạn thường xuyên sử dụng nó, có thể tốt hơn nếu bạn khai báo một macro

#define TimeStamp [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000]

Sau đó, hãy gọi nó như thế này:

NSString * timestamp = TimeStamp;

Hoặc như một phương pháp:

- (NSString *) timeStamp {
    return [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
}

As TimeInterval

- (NSTimeInterval) timeStamp {
    return [[NSDate date] timeIntervalSince1970] * 1000;
}

GHI CHÚ:

1000 là để chuyển đổi dấu thời gian thành mili giây. Bạn có thể loại bỏ điều này nếu bạn thích thời gian của mình trong vài giây.

Nhanh

Nếu bạn muốn một biến toàn cục trong Swift, bạn có thể sử dụng cái này:

var Timestamp: String {
    return "\(NSDate().timeIntervalSince1970 * 1000)"
}

Sau đó, bạn có thể gọi nó là

println("Timestamp: \(Timestamp)")

Một lần nữa, đó *1000là mili giây, nếu muốn, bạn có thể xóa nó. Nếu bạn muốn giữ nó như mộtNSTimeInterval

var Timestamp: NSTimeInterval {
    return NSDate().timeIntervalSince1970 * 1000
}

Khai báo những điều này bên ngoài ngữ cảnh của bất kỳ lớp nào và chúng sẽ có thể truy cập được ở mọi nơi.


2
Không sao, tôi đã cập nhật Macro mà tôi sử dụng trong trường hợp nó hữu ích cho tình huống của bạn!
Logan

3
Cảm ơn @Logan nhưng tôi khá chắc chắn rằng macro luôn không được khuyến khích. Bạn có thể dễ dàng mất hiểu biết về một chương trình lớn với macro. Tốt nhất chỉ nên tạo một phương thức thực hiện điều này và được gọi bất cứ khi nào bạn cần.
Supertecnoboff

BTW - nếu bạn đang thêm giá trị vào từ điển, bạn chỉ có thể thực hiện:@{@"timestamp": @([[NSDate date] timeIntervalSince1970])
Cbas

15

sử dụng [[NSDate date] timeIntervalSince1970]


8
@([[NSDate date] timeIntervalSince1970]).stringValue
mattsven

7
- (void)GetCurrentTimeStamp
    {
        NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
        [objDateformat setDateFormat:@"yyyy-MM-dd"];
        NSString    *strTime = [objDateformat stringFromDate:[NSDate date]];
        NSString    *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
        NSDate *objUTCDate  = [objDateformat dateFromString:strUTCTime];
        long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);

        NSString *strTimeStamp = [NSString stringWithFormat:@"%lld",milliseconds];
NSLog(@"The Timestamp is = %@",strTimeStamp);
    }

 - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate  *objDate    = [dateFormatter dateFromString:IN_strLocalTime];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        NSString *strDateTime   = [dateFormatter stringFromDate:objDate];
        return strDateTime;
    }

LƯU Ý: - Dấu thời gian phải ở Vùng UTC, Vì vậy, tôi chuyển đổi Giờ địa phương của chúng tôi thành Giờ UTC.


GetCurrentTimeStamp () của bạn có một số vấn đề về chữ thường. cắt và dán vào Xcode để xem
tdios

Vui lòng sử dụng "NSString * strTimeStamp = [NSString stringWithFormat: @"% lld ", mili giây]; NSLog (@" Dấu thời gian là =% @ ", strTimeStamp);"
Vicky

6

Nếu bạn muốn gọi phương thức này trực tiếp trên một đối tượng NSDate và lấy dấu thời gian dưới dạng chuỗi tính bằng mili giây mà không có bất kỳ vị trí thập phân nào, hãy xác định phương thức này dưới dạng một danh mục:

@implementation NSDate (MyExtensions)
- (NSString *)unixTimestampInMilliseconds
{
     return [NSString stringWithFormat:@"%.0f", [self timeIntervalSince1970] * 1000];
}

1

// Phương thức sau sẽ trả về cho bạn dấu thời gian sau khi chuyển đổi thành mili giây. [QUAY LẠI STRING]

- (NSString *) timeInMiliSeconds
{
    NSDate *date = [NSDate date];
    NSString * timeInMS = [NSString stringWithFormat:@"%lld", [@(floor([date timeIntervalSince1970] * 1000)) longLongValue]];
    return timeInMS;
}

1

Cũng có thể sử dụng

@(time(nil)).stringValue);

cho dấu thời gian trong vài giây.


1

Thật tiện lợi khi xác định macro để lấy dấu thời gian hiện tại

class Constant {
    struct Time {
        let now = { round(NSDate().timeIntervalSince1970) } // seconds
    }
} 

Sau đó, bạn có thể sử dụng let timestamp = Constant.Time.now()


0

Nhanh:

Tôi có một UILabel hiển thị TimeStamp qua một bản xem trước máy ảnh.

    var timeStampTimer : NSTimer?
    var dateEnabled:  Bool?
    var timeEnabled: Bool?
   @IBOutlet weak var timeStampLabel: UILabel!

override func viewDidLoad() {
        super.viewDidLoad()
//Setting Initial Values to be false.
        dateEnabled =  false
        timeEnabled =  false
}

override func viewWillAppear(animated: Bool) {

        //Current Date and Time on Preview View
        timeStampLabel.text = timeStamp
        self.timeStampTimer = NSTimer.scheduledTimerWithTimeInterval(1.0,target: self, selector: Selector("updateCurrentDateAndTimeOnTimeStamperLabel"),userInfo: nil,repeats: true)
}

func updateCurrentDateAndTimeOnTimeStamperLabel()
    {
//Every Second, it updates time.

        switch (dateEnabled, timeEnabled) {
        case (true?, true?):
            timeStampLabel.text =  NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .LongStyle, timeStyle: .MediumStyle)
            break;
        case (true?, false?):
            timeStampLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .LongStyle, timeStyle: .NoStyle)
            break;

        case (false?, true?):
            timeStampLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .NoStyle, timeStyle: .MediumStyle)
            break;
        case (false?, false?):
            timeStampLabel.text =  NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .NoStyle, timeStyle: .NoStyle)
            break;
        default:
            break;

        }
    }

Tôi đang thiết lập Nút cài đặt để kích hoạt Chế độ xem cảnh báo.

@IBAction func settingsButton(sender : AnyObject) {


let cameraSettingsAlert = UIAlertController(title: NSLocalizedString("Please choose a course", comment: ""), message: NSLocalizedString("", comment: ""), preferredStyle: .ActionSheet)

let timeStampOnAction = UIAlertAction(title: NSLocalizedString("Time Stamp on Photo", comment: ""), style: .Default) { action in

    self.dateEnabled = true
    self.timeEnabled =  true

}
let timeStampOffAction = UIAlertAction(title: NSLocalizedString("TimeStamp Off", comment: ""), style: .Default) { action in

    self.dateEnabled = false
    self.timeEnabled =  false

}
let dateOnlyAction = UIAlertAction(title: NSLocalizedString("Date Only", comment: ""), style: .Default) { action in

    self.dateEnabled = true
    self.timeEnabled =  false


}
let timeOnlyAction = UIAlertAction(title: NSLocalizedString("Time Only", comment: ""), style: .Default) { action in

    self.dateEnabled = false
    self.timeEnabled =  true
}

let cancel = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .Cancel) { action in

}
cameraSettingsAlert.addAction(cancel)
cameraSettingsAlert.addAction(timeStampOnAction)
cameraSettingsAlert.addAction(timeStampOffAction)
cameraSettingsAlert.addAction(dateOnlyAction)
cameraSettingsAlert.addAction(timeOnlyAction)

self.presentViewController(cameraSettingsAlert, animated: true, completion: nil)

}


0
    NSDate *todaysDate = [NSDate new];
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"MM-dd-yyyy HH:mm:ss"];
NSString *strDateTime = [formatter stringFromDate:todaysDate];

NSString *strFileName = [NSString stringWithFormat:@"/Users/Shared/Recording_%@.mov",strDateTime];
NSLog(@"filename:%@",strFileName);

Nhật ký sẽ là: filename: / Users / Shared / Recording_06-28-2016 12: 53: 26.mov


0

Nếu bạn cần dấu thời gian dưới dạng chuỗi.

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];

0

Để lấy dấu thời gian từ NSDate Swift 3

func getCurrentTimeStampWOMiliseconds(dateToConvert: NSDate) -> String {
    let objDateformat: DateFormatter = DateFormatter()
    objDateformat.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let strTime: String = objDateformat.string(from: dateToConvert as Date)
    let objUTCDate: NSDate = objDateformat.date(from: strTime)! as NSDate
    let milliseconds: Int64 = Int64(objUTCDate.timeIntervalSince1970)
    let strTimeStamp: String = "\(milliseconds)"
    return strTimeStamp
}

Để sử dụng

let now = NSDate()
let nowTimeStamp = self.getCurrentTimeStampWOMiliseconds(dateToConvert: now)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.