cocoa cocoa-touch nsdate nsdateformatter unix-timestamp

cocoa - Obtenga NSDate actual en formato de marca de tiempo



cocoa-touch nsdateformatter (11)

// El siguiente método le devolverá la marca de tiempo después de convertir a milisegundos. [DEVOLUCIONES STRING]

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

Tengo un método básico que obtiene la hora actual y lo establece en una cadena. Sin embargo, ¿cómo puedo obtener el formato de la fecha y hora actual en un formato de indicación de fecha y hora UNIX desde 1970?

Aquí está mi código:

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

¿Es posible utilizar NSDateFormatter para cambiar el ''resultString'' en una marca de tiempo?


Es conveniente definir una macro para obtener la marca de tiempo actual

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

Entonces puede usar let timestamp = Constant.Time.now()


Esto es lo que uso:

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

(multiplicado por 1000 durante milisegundos, de lo contrario, sáquelo)

Si lo está usando todo el tiempo, podría ser bueno declarar una macro

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

Entonces llámalo así:

NSString * timestamp = TimeStamp;

O como un método:

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

Como TimeInterval

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

NOTA:

El 1000 es convertir la marca de tiempo en milisegundos. Puede eliminar esto si prefiere su intervalo de tiempo en segundos.

Rápido

Si desea una variable global en Swift, puede usar esto:

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

Entonces, puedes llamarlo

println("Timestamp: /(Timestamp)")

Nuevamente, el *1000 es por milisegundos, si lo prefiere, puede eliminarlo. Si quieres mantenerlo como un NSTimeInterval

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

Declare estos fuera del contexto de cualquier clase y estarán accesibles en cualquier lugar.


Rápido:

Tengo un UILabel que muestra TimeStamp sobre una vista previa de la cámara.

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

Estoy configurando un botón de configuración para activar un 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)

}


Si desea llamar a este método directamente en un objeto NSDate y obtener la marca de tiempo como una cadena en milisegundos sin ningún lugar decimal, defina este método como una categoría:

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


Si necesita marca de tiempo como una cadena.

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


También puede usar

@(time(nil)).stringValue);

para la marca de tiempo en segundos.


use [[NSDate date] timeIntervalSince1970]


Para obtener la marca de tiempo de 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 }

Usar

let now = NSDate() let nowTimeStamp = self.getCurrentTimeStampWOMiliseconds(dateToConvert: now)


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

El registro será: nombre de archivo: / Users / Shared / Recording_06-28-2016 12: 53: 26.mov


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

NOTA: - La marca de tiempo debe estar en la zona UTC, por lo tanto, convierto nuestra hora local a hora UTC.