Holen Sie sich das aktuelle NSDate im Zeitstempelformat


83

Ich habe eine grundlegende Methode, die die aktuelle Zeit abruft und in einen String setzt. Wie kann ich jedoch das aktuelle Datum und die aktuelle Uhrzeit in einem UNIX-Zeitstempelformat seit 1970 formatieren?

Hier ist mein Code:

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

Ist es möglich, NSDateFormatterden 'resultString' in einen Zeitstempel zu ändern?

Antworten:


216

Folgendes verwende ich:

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

(mal 1000 für Millisekunden, sonst nimm das raus)

Wenn Sie es ständig verwenden, kann es hilfreich sein, ein Makro zu deklarieren

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

Dann nenne es so:

NSString * timestamp = TimeStamp;

Oder als Methode:

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

Als TimeInterval

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

HINWEIS:

Die 1000 dient zum Konvertieren des Zeitstempels in Millisekunden. Sie können dies entfernen, wenn Sie Ihr timeInterval in Sekunden bevorzugen.

Schnell

Wenn Sie eine globale Variable in Swift möchten, können Sie Folgendes verwenden:

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

Dann können Sie es nennen

println("Timestamp: \(Timestamp)")

Auch dies *1000gilt für Millisekunden. Wenn Sie dies bevorzugen, können Sie dies entfernen. Wenn Sie es als behalten möchtenNSTimeInterval

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

Deklarieren Sie diese außerhalb des Kontexts einer Klasse und sie sind überall zugänglich.


2
Kein Problem, ich habe mit dem von mir verwendeten Makro aktualisiert, falls es für Ihre Situation hilfreich ist!
Logan

3
Danke @Logan, aber ich bin mir ziemlich sicher, dass Makros immer entmutigt sind. Mit Makros können Sie leicht das Verständnis für ein großes Programm verlieren. Es ist am besten, nur eine Methode zu erstellen, die dies tut und aufgerufen wird, wann immer Sie sie benötigen.
Supertecnoboff

Übrigens - wenn Sie den Wert zu einem Wörterbuch hinzufügen, können Sie einfach tun:@{@"timestamp": @([[NSDate date] timeIntervalSince1970])
Cbas

15

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

HINWEIS: - Der Zeitstempel muss sich in der UTC-Zone befinden. Daher konvertiere ich unsere Ortszeit in die UTC-Zeit.


Ihr GetCurrentTimeStamp () weist einige Kleinbuchstaben auf. Ausschneiden und Einfügen in Xcode, um zu sehen
tdios

Bitte verwenden Sie diesen "NSString * strTimeStamp = [NSString stringWithFormat: @"% lld ", Millisekunden]; NSLog (@" Der Zeitstempel ist =% @ ", strTimeStamp);"
Vicky

6

Wenn Sie diese Methode direkt für ein NSDate-Objekt aufrufen und den Zeitstempel als Zeichenfolge in Millisekunden ohne Dezimalstellen abrufen möchten, definieren Sie diese Methode als Kategorie:

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

1

// Die folgende Methode gibt Ihnen nach der Konvertierung in Millisekunden einen Zeitstempel zurück. [RETURNS STRING]

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

1

Kann auch verwenden

@(time(nil)).stringValue);

für Zeitstempel in Sekunden.


1

Es ist praktisch, ein Makro zu definieren, um den aktuellen Zeitstempel abzurufen

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

Dann können Sie verwenden let timestamp = Constant.Time.now()


0

Schnell:

Ich habe ein UILabel, das TimeStamp über eine Kameravorschau anzeigt.

    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;

        }
    }

Ich richte eine Einstellungsschaltfläche ein, um eine alertView auszulösen.

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

Das Protokoll lautet: Dateiname: / Users / Shared / Recording_06-28-2016 12: 53: 26.mov


0

Wenn Sie einen Zeitstempel als Zeichenfolge benötigen.

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

0

So erhalten Sie einen Zeitstempel von 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
}

Benutzen

let now = NSDate()
let nowTimeStamp = self.getCurrentTimeStampWOMiliseconds(dateToConvert: now)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.