Ich habe eine grundlegende Methode, die die aktuelle Zeit abruft und sie in eine Zeichenfolge setzt. Wie kann ich jedoch das aktuelle Datum und die Uhrzeit in einem UNIX-Format (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, NSDateFormatter
zu verwenden, um den 'resultString' in einen Zeitstempel umzuwandeln?
Ich verwende Folgendes:
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 nett 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 soll den Zeitstempel in Millisekunden umrechnen. Sie können dies entfernen, wenn Sie Ihr timeInterval in Sekunden bevorzugen.
Schnell
Wenn Sie eine globale Variable in Swift wünschen, können Sie Folgendes verwenden:
var Timestamp: String {
return "\(NSDate().timeIntervalSince1970 * 1000)"
}
Dann können Sie es anrufen
println("Timestamp: \(Timestamp)")
Der *1000
ist wiederum für Millisekunden. Wenn Sie möchten, können Sie das entfernen. Wenn Sie es als NSTimeInterval
behalten wollen
var Timestamp: NSTimeInterval {
return NSDate().timeIntervalSince1970 * 1000
}
Deklarieren Sie diese außerhalb des Kontextes einer Klasse und sie sind von überall aus zugänglich.
verwenden Sie [[NSDate date] timeIntervalSince1970]
- (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 UTC-Zeit.
Wenn Sie diese Methode direkt für ein NSDate-Objekt aufrufen möchten und den Zeitstempel in Millisekunden ohne Dezimalstellen als Zeichenfolge erhalten möchten, definieren Sie diese Methode als Kategorie:
@implementation NSDate (MyExtensions)
- (NSString *)unixTimestampInMilliseconds
{
return [NSString stringWithFormat:@"%.0f", [self timeIntervalSince1970] * 1000];
}
// Die folgende Methode gibt den Zeitstempel nach der Konvertierung in Millisekunden zurück. [RETURNS STRING]
- (NSString *) timeInMiliSeconds
{
NSDate *date = [NSDate date];
NSString * timeInMS = [NSString stringWithFormat:@"%lld", [@(floor([date timeIntervalSince1970] * 1000)) longLongValue]];
return timeInMS;
}
Kann auch verwenden
@(time(nil)).stringValue);
für Zeitstempel in Sekunden.
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 let timestamp = Constant.Time.now()
verwenden.
Zeitstempel von NSDate Swift 3 erhalten
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)
Schnell:
Ich habe ein UILabel, das TimeStamp über eine Kameravorschau zeigt.
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 stelle 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)
}
Wenn Sie einen Zeitstempel als Zeichenfolge benötigen.
time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];
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:/Benutzer/Freigegeben/Aufnahme_06-28-2016 12: 53: 26.Mov