কীভাবে এনএসডিটকে ইউনিক্স টাইমস্ট্যাম্প আইফোন এসডিকে রূপান্তর করতে?


143

কীভাবে একটি NSDateইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করবেন ? আমি অনেক পোস্ট পড়েছি যা বিপরীত হয়। তবে আমি আমার প্রশ্নের সাথে সম্পর্কিত কিছু খুঁজে পাচ্ছি না।

উত্তর:


269

আমি বিশ্বাস করি এটি হ'ল এনএসডেটের নির্বাচক যা আপনি খুঁজছেন:

- (NSTimeInterval)timeIntervalSince1970

2
কোনও এনএসডিট সরবরাহ করা থাকলে এটি কি ইউনিক্স টাইমস্ট্যাম্পটি ফেরত দেয়?
নেহা

1
হ্যাঁ, আপনি যা খুঁজছেন ঠিক এটিই। ইউএনআইএক্স 1 ই জানুয়ারী 1970 থেকে সেকেন্ডে সময় পরিমাপ করে এবং এই পদ্ধতিটি রিসিভারের (আপনার এনএসডিট সরবরাহ করা) এবং 1 জানুয়ারির 1970, জিএমটির প্রথম তাত্ক্ষণিকের মধ্যে বিরতি দেয়। এনএসটিমেআইন্টারওয়াল আসলে ডাবল টাইপডেফ।
ব্যান্ডোনভস্কি

26
একটি স্ট্রিং পেতে (28/11/2011 14:14:13 <-> 1322486053): [এনএসএস স্ট্রিং উইথফর্ম্যাট: @ "%। 0 এফ", [তারিখের সময় অন্তর্বর্তীসংশ্লিষ্ট 1970]];
16uǝʞ

2
সাধারণভাবে ডিভাইসে সময় সেট করে পদ্ধতিটি পরিবর্তন করা হয়। আমি একটি পরীক্ষা করেছিলাম যেখানে আমি রাত ১২ টায় টাইমস্ট্যাম্প পেয়েছিলাম এবং তারপরে আইপ্যাডের সময়টি প্রায় রাত ৮ টার দিকে পরিবর্তিত হয় এবং দুটি সংখ্যার পার্থক্য অত্যন্ত বেশি ছিল। টাইমস্ট্যাম্পটি কোনও ডিভাইসের সময় নির্ভর না করে সংখ্যাগুলি কেবল কয়েক সেকেন্ডের মধ্যে বন্ধ করে দেওয়া উচিত ছিল, তবে এই ক্ষেত্রে আমি উপসংহারে পৌঁছেছিলাম যে আইপ্যাডের
সময়টি

1
@ এসকো 918 অবশ্যই আছে। ইউনিক্স সময় আপনি যে নির্দিষ্ট সময়ে নির্দিষ্ট করতে চান সেই সময় পর্যন্ত 1970 সাল থেকে সেকেন্ডের সংখ্যা বর্ণনা করে (এই ক্ষেত্রে "এখন")। আপনি যদি আপনার আইপ্যাডে সময় পরিবর্তন করেন, আপনি কার্যকরভাবে "এখন" অন্য কোনও সময়ে পরিবর্তন করেন এবং তাই সময় স্ট্যাম্পগুলির মধ্যে পার্থক্য।
মার্শবারে

69

একটি ইউনিক্স টাইমস্ট্যাম্পটি 00:00:00 ইউটিসি জানুয়ারী 1, 1970 থেকে সেকেন্ডের সংখ্যা It's এটি টাইম_টি টাইপ দ্বারা প্রতিনিধিত্ব করে , যা সাধারণত স্বাক্ষরিত 32-বিট পূর্ণসংখ্যার টাইপ (দীর্ঘ বা আন্ত ) হয়।

আইওএস সরবরাহ করে - এনএসডিট অবজেক্টগুলির জন্য (এনএসটাইমইন্টারভাল) সময় ইনট্রাওয়ালসিনস ১৯৯০ যা 00:00:00 জিএমটি জানুয়ারী 1, 1970 থেকে সেকেন্ডের সংখ্যা ফিরে আসে N

যেহেতু উভয়ের উভয়ই একই রেফারেন্স রয়েছে (মধ্যরাত 1 জানুয়ারী 7070 ইউটিসি) এবং রূপান্তরটি সহজভাবে উভয়ই সেকেন্ডে হওয়ায় আপনার প্রয়োজনের উপর ভিত্তি করে এনএসটিমেইন্টারওয়ালকে একটি সময়_তে রূপান্তর করুন:

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];

এই ফাংশনটি আমাকে সঠিক তারিখ দেখায় তবে সময়টি ভুল। এটি সিস্টেম সময়ের সাথে মেলে না।
নেহা

ইউনিক্স সময়টি ইউটিসি (জিএমটি), ভারত ইউটিসি + 5.5। এটি 5.5 ঘন্টা দ্বারা বন্ধ হয়?
প্রোগ্রামার

7
আপনার সিস্টেম সময়টি আপনার স্থানীয় সময় অঞ্চলে সময় দেখায় যা ঠিক। ইউনিক্স টাইমস্ট্যাম্প স্থানীয় সময় নয়, এটি সর্বদা ইউটিসি সময় হয়, এটি ভারতে +5: 30 দ্বারা আলাদা হয়, এখান থেকে -7: 00 by এটাই সঠিক.
অগ্রগামী

তবে কীভাবে এটি ব্যবহার করবেন? আমি কি পরে আমার গণনায় এটি ব্যবহার করতে পারি? অনলাইনে পিএইচপি ডাটাবেস থেকে আমার একটি ইউনিক্স টাইমস্ট্যাম্প এবং তারপরে এটি one কোনও বস্তুর সর্বশেষতম ডেটা ডাউনলোড করার সিদ্ধান্ত নেওয়ার জন্য আমি দুজনের তুলনা করতে চাই।
জেরোইনজাইফফ

আমি এখনই এটি করছি: int unixTime = floor([piece.piece_last_view timeIntervalSince1970]) টুকরো.পিস.এল_ভিউ একটি এনএসডিট
জেরোইন আইজখফ

26

আপনি কোনও তারিখ থেকে এইভাবে একটি ইউনিক্স টাইমস্ট্যাম্প তারিখ তৈরি করতে পারেন:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];

21
এটি ভুল, timeIntervalSince1970 একটি টাইমইন্টারভাল দেয় যা আসলে দ্বিগুণ।
ম্যাট ওল্ফ

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

দ্রষ্টব্য: - টাইমস্ট্যাম্পটি অবশ্যই ইউটিসি জোনে থাকা উচিত, তাই আমি আমাদের স্থানীয় সময়টিকে ইউটিসি সময়ের সাথে রূপান্তর করি।


6

দ্রুতগতি

সুইফট 3-এর জন্য আপডেট করা হয়েছে

// current date and time
let someDate = Date()

// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970

মন্তব্য

  • timeIntervalSince1970প্রত্যাবর্তন TimeInterval, যা একটি টাইপালিয়াস Double

  • আপনি যদি অন্যভাবে যেতে চান তবে নিম্নলিখিতগুলি করতে পারতেন:

      let myDate = Date(timeIntervalSince1970: myTimeStamp)

5

আপনি যদি এই সময়টিকে একটি ডাটাবেসে সঞ্চয় করতে চান বা সার্ভারের মাধ্যমে পাঠাতে চান ... ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করা ভাল। এটি পেতে এখানে একটি ছোট স্নিপেট রয়েছে:

+ (NSTimeInterval)getUTCFormateDate{

    NSDateComponents *comps = [[NSCalendar currentCalendar] 
                               components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit 
                               fromDate:[NSDate date]];
    [comps setHour:0];
    [comps setMinute:0];    
    [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];

    return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];  
}

আপনি কেন উপাদানগুলিতে ঘন্টা এবং মিনিট 0 থেকে সেট করছেন? এছাড়াও, কিভাবে এটা এই উপর ভিত্তি করে ইউটিসি সঠিক দেব: [[NSTimeZone systemTimeZone] secondsFromGMT]]? একটু ব্যাখ্যা করুন।
হেমাঙ্গ

হাই বন্ধু এটি আমাকে সাহায্য করেছিল
রাহুল কে রাজন


4

@ কক্সিকের পরামর্শ অনুসারে ইউনিক্স সময় ফাংশনটি নীচে ব্যবহার করুন:

  time_t result = time(NULL);
  NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);

.আমাদের অভিজ্ঞতা অনুসারে - সময় অন্তর্বর্তী সাইন ১৯৯০ ব্যবহার করবেন না, এটি যুগের টাইমস্ট্যাম্প দেয় - আপনি জিএমটির পিছনে থাকা সেকেন্ডের সংখ্যা।

[[এনএসডি তারিখ] টাইমইন্টারওয়ালসিনস ১৯৯০] এর সাথে একটি বাগ থাকত, এটি ফোনের টাইমজোনকে ভিত্তি করে সময় যোগ / বিয়োগ করত তবে এখনই এটি সমাধান হয়েছে বলে মনে হয়।


আমি আমার উত্তরটি সংশোধন করছি - এটি সত্যই সমান বলে মনে হচ্ছে। যদিও সময় (এনএলএল) একটি সামান্য কিছুটা দ্রুত হতে পারে কারণ এটি অজেক্ট-সি রানটাইমকে কল করে না। : পি টেস্ট কোড এনএসএলগ (@ "সময় (এনওএলএল) =% ডি; টাইম ইনটারওয়ালসিনস ১৯৯০ =% ডি", (ইনট) সময় (এনওএলএল), (ইনট) [[এনএসডেটের তারিখ] টাইমইন্টারভালসিন্স ১৯70০]);
k3a

আমি [[এনএসডি তারিখ] টাইম ইনটারওয়ালসিনস ১৯৯০] নিয়ে সমস্যার মুখোমুখি হয়েছি। তারা মনে করে যে অঞ্চলে আপনিও রয়েছেন consider
তপন ঠাকর

হ্যাঁ, আমি মনে করি এটি সেদিনই আমি অভিজ্ঞতা অর্জন করেছি কিন্তু জিএমটি + 2 টাইমজোন সহ
আইওএস

2
 [NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]]; 

প্রথম ইউনিক্সটাইম 1532278070

দ্বিতীয় ইউনিক্সটাইম 1532278070.461380

তৃতীয় ইউনিক্সটাইম 1532278070


0

আপনার যদি স্ট্রিং হিসাবে টাইম স্ট্যাম্পের প্রয়োজন হয়।

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.