Отримайте поточну дату NSD у форматі мітки часу


83

У мене є основний метод, який отримує поточний час і встановлює його в рядку. Однак як я можу змусити його форматувати поточну дату та час у форматі часової позначки UNIX з 1970 року?

Ось мій код:

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

Чи можна використовувати, NSDateFormatterщоб змінити 'resultString' на позначку часу?

Відповіді:


216

Ось що я використовую:

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

(в 1000 разів на мілісекунди, інакше вийміть це)

Якщо ви використовуєте його весь час, може бути непогано оголосити макрос

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

Тоді назвіть це так:

NSString * timestamp = TimeStamp;

Або як метод:

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

Як TimeInterval

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

ПРИМІТКА:

1000 - це перетворення позначки часу в мілісекунди. Ви можете видалити це, якщо віддаєте перевагу своєму інтервалу часу в секундах.

Стрімкий

Якщо ви хочете отримати глобальну змінну в Swift, ви можете використовувати це:

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

Потім ви можете зателефонувати

println("Timestamp: \(Timestamp)")

Знову ж таки, *1000це на мілісекунди, якщо ви хочете, ви можете видалити це. Якщо ви хочете зберегти його як файлNSTimeInterval

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

Заявіть про це поза контекстом будь-якого класу, і вони будуть доступні де завгодно.


2
Немає проблем, я оновив використовуваний макрос на випадок, якщо це корисно для вашої ситуації!
Логан

3
Дякую @Logan, але я впевнений, що макроси завжди не рекомендуються. Ви легко можете втратити розуміння великої програми з макросами. Найкраще було б просто створити метод, який робить це і викликається, коли вам це потрібно.
Supertecnoboff

До речі - якщо ви додаєте значення до словника, ви можете просто зробити:@{@"timestamp": @([[NSDate date] timeIntervalSince1970])
Cbas


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;
    }

ПРИМІТКА: - Відмітка часу повинна бути в зоні UTC, тому я перетворюю наш місцевий час на UTC-час.


ваш GetCurrentTimeStamp () має кілька нижчих регістрів. вирізати та вставити в Xcode, щоб побачити
tdios

Будь ласка, використовуйте цей "NSString * strTimeStamp = [NSString stringWithFormat: @"% lld ", мілісекунди]; NSLog (@" Відмітка часу =% @ ", strTimeStamp);"
Вікі

6

Якщо ви хочете викликати цей метод безпосередньо на об’єкт NSDate і отримати позначку часу як рядок у мілісекундах без десяткових знаків, визначте цей метод як категорію:

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

1

// Наступний метод поверне вам мітку часу після перетворення в мілісекунди. [ВЕРНУЄТЬСЯ РЯДОК]

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

1

Можна також використовувати

@(time(nil)).stringValue);

для позначки часу в секундах.


1

Зручно визначити макрос для отримання поточної позначки часу

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

Тоді можна використовувати let timestamp = Constant.Time.now()


0

Стрімкий:

У мене є UILabel, який показує TimeStamp над попереднім переглядом камери.

    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;

        }
    }

Я встановлюю кнопку налаштування, щоб запустити alertView.

@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);

Журнал буде: ім'я файлу: / Користувачі / Спільний доступ / Запис_06-28-2016 12: 53: 26.mov


0

Якщо вам потрібна мітка часу у вигляді рядка.

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

0

Щоб отримати мітку часу від 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
}

Використовувати

let now = NSDate()
let nowTimeStamp = self.getCurrentTimeStampWOMiliseconds(dateToConvert: now)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.