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?

Supertecnoboff
quelle

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.

Logan
quelle
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]

sage444
quelle
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.

Vicky
quelle
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];
}
Pellet
quelle
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;
}
Fatima Arshad
quelle
1

Kann auch verwenden

@(time(nil)).stringValue);

für Zeitstempel in Sekunden.

rubik
quelle
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()

Alston
quelle
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)

}}

AG
quelle
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

jiten
quelle
0

Wenn Sie einen Zeitstempel als Zeichenfolge benötigen.

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];
Nanjunda
quelle
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)
Hardik Thakkar
quelle