ইউনিক্স টাইমস্ট্যাম্পের এক্সেল তারিখ


85

কেউ কীভাবে এক্সেল তারিখটিকে সঠিক ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করতে জানেন?


"এক্সেল ডেট" বলতে কী বোঝ? আপনি কি বোঝাতে চাইছেন যে পাঠ্যটি কোনও মানব-পঠনযোগ্য তারিখ-সময়ের স্ট্রিংয়ের মতো ফর্ম্যাট হয়েছে "11/09/2009 3:23:24 PM"?
ম্যাট বল

4
ভুলে যাবেন না যে 1938, 2038-এ ইউনিক্স টাইম স্ট্যাম্প 32-বিট ওভারফ্লোর কারণে কাজ বন্ধ করবে। এই মুহুর্তের আগে লক্ষ লক্ষ অ্যাপ্লিকেশনগুলিকে হয় সময় স্ট্যাম্পগুলির জন্য একটি নতুন কনভেনশন গ্রহণ করতে হবে বা 64৪-বিট সিস্টেমে মাইগ্রেট করতে হবে যা সময় স্ট্যাম্পকে আরও "বিট" কিনবে।

13
আরও বেশি 32 বিটের মতো like
ব্যবহারকারী 606723

উত্তর:


107

এর মধ্যে আমার পক্ষে কাজ করা হয়নি ... যখন আমি টাইমস্ট্যাম্পটিকে আবার রূপান্তর করি তখন এটি 4 বছর বন্ধ।

এটি নিখুঁতভাবে কাজ করেছে: =(A2-DATE(1970,1,1))*86400

ক্রেডিট এতে যায়: ফিলিপ সিজ্জা http://fczaja.blogspot.ca

আসল পোস্ট: http://fczaja.blogspot.ca/2011/06/convers-excel-date-into-timestamp.html


6
আপনার সময় অঞ্চলটি ভুলে যাবেন না (যদি না আপনি ইউটিসি তে থাকেন এবং গ্রীষ্মের সময়টি পর্যবেক্ষণ না করেন)। ইউনিক্সের যুগটি টাইম জোনের অজগনীয় যেখানে স্প্রেডশিট নেই। এখানে উদাহরণ সহ একটি গাইড রয়েছে।
অ্যাডাম কাটজ

GMT + 8:=((A1+28800)/86400)+25569
ইভান চাউ

=(NOW()-DATE(1970,1,1))*86400 + 5*3600
সিডিটির

এক্সেলের আধুনিক সংস্করণগুলি উপরের সূত্রে অভিযোগ করবে যদি না আপনি সেমিকোলন দিয়ে কমা প্রতিস্থাপন করেন:(1970;1;1)
জোসে লুইস ব্লাঙ্কো

4
@ ট্যানজিগিল আপনি যে সেলগুলি টার্গেট করছেন সেগুলি যদি এক্সেলের মধ্যে আসলে তারিখ হয় তবে এটি কাজ করবে। যদি এটি পাঠ্য হয় তবে এমন একটি তারিখ উপস্থাপন করার কথা যা সমস্ত বেট বন্ধ রয়েছে।
কেসি

76

উইন্ডোজ এবং ম্যাক এক্সেল (২০১১):

Unix Timestamp = (Excel Timestamp - 25569) * 86400
Excel Timestamp =  (Unix Timestamp / 86400) + 25569

ম্যাক ওএস এক্স (2007):

Unix Timestamp = (Excel Timestamp - 24107) * 86400
Excel Timestamp =  (Unix Timestamp / 86400) + 24107

রেফারেন্সের জন্য:

86400 = Seconds in a day
25569 = Days between 1970/01/01 and 1900/01/01 (min date in Windows Excel)
24107 = Days between 1970/01/01 and 1904/01/02 (min date in Mac Excel 2007)

4
ম্যাকের অফিস 2011 এই সূত্রগুলির "উইন্ডোজ" সংস্করণটির সাথে দুর্দান্ত কাজ করছে বলে মনে হচ্ছে। "ম্যাক" সংস্করণগুলি এতে বন্ধ রয়েছে।
রেডিক্যান্ড

4
আমি মনে করি আপনি সেই সূত্রগুলিতে এক্সেল এবং ইউনিক্স টাইমস্ট্যাম্পগুলি বিপরীত করেছেন। ইউনিক্স টাইমস্ট্যাম্পটি বেশ কয়েক সেকেন্ডের, এবং তাই সূত্রগুলি যা বলে, এটি এক্সেল টাইমস্ট্যাম্পের চেয়ে 86400 দ্বারা ভাগ করা দরকার। @ রেডিক্যান্ডের উত্তর দেখুন।
মাইক হিউস্টন

মন্তব্যের জন্য ধন্যবাদ, এটি ম্যাক এক্সেল ২০১১ এ পরীক্ষা করা হয়েছে এবং দেখে মনে হচ্ছে সেগুলি উইন্ডোজ সংস্করণের মতো।
জেফ উ

মিলিসেকেন্ডগুলিকে সংরক্ষণ করে মিলিসেকেন্ডে কোনও ইউনিক্স টাইমস্ট্যাম্পকে কী ডেটটাইমে রূপান্তর করার কোনও উপায় আছে?
লরেঞ্জো বেলি

স্ট্যাকওভারফ্লো লোকটি বলে হ্যাঁ, লিপ সেকেন্ডের কী, প্রফেসর।
ক্যাটালফেটামাইন

11

যদি আমরা ধরে নিই যে এক্সেলের তারিখটি A1 সেলটিতে তারিখ হিসাবে ফর্ম্যাট হয় এবং ইউনিক্স টাইমস্ট্যাম্পটি A2 কক্ষে থাকা উচিত যা A2 তে সূত্রটি নম্বর হিসাবে ফর্ম্যাট করা উচিত:

= (এ 1 * 86400) - 2209075200

কোথায়:

82000 সেকেন্ডের সংখ্যা 2209075200 হল 1900-01-01 এবং 1970-01-01 এর মধ্যে সেকেন্ডের সংখ্যা যা এক্সেল এবং ইউনিক্স টাইমস্ট্যাম্পগুলির জন্য বেস তারিখগুলি।

উপরেরটি উইন্ডোজের ক্ষেত্রে সত্য। ম্যাকে এক্সেলের বেসের তারিখটি 1904-01-01 এবং সেকেন্ডের নম্বরটি সংশোধন করতে হবে: 2082844800


এটি কমপক্ষে উইন্ডোতে ঠিক কাজ করে না। এটি 19 ঘন্টা দ্বারা বন্ধ হয়।
এলএলবিবিএল

4
সুতরাং এটি হওয়া উচিত: = (এ 1 * 86400) - 2209143600
এলএলবিবিএল

4
ম্যাক এক্সেল ডিফল্ট তারিখ বেস 1904 যেখানে উইন্ডোজ এক্সেলের মধ্যে এটি 1900, তবে আপনি পছন্দ / গণনার অধীনে "1904 তারিখের ব্যবস্থাটি" ব্যবহার না করে চেক করে ম্যাক এক্সেলের তারিখ বেসটি পরিবর্তন করতে পারেন, তারপরে এটি উইন্ডোজ এক্সেলের মতো কাজ করে।
ক্লাউডরঞ্জার

7

মাইক্রোসফ্ট এক্সেলের মতো স্প্রেডশিট সিস্টেমগুলির জন্য ইউটিসি ধরে ধরে রেফারেন্সের জন্য এখানে একটি ম্যাপিং দেওয়া হচ্ছে :

                         Unix  Excel Mac    Excel    Human Date  Human Time
Excel Epoch       -2209075200      -1462        0    1900/01/00* 00:00:00 (local)
Excel ≤ 2011 Mac† -2082758400          0     1462    1904/12/31  00:00:00 (local)
Unix Epoch                  0      24107    25569    1970/01/01  00:00:00 UTC
Example Below      1234567890      38395.6  39857.6  2009/02/13  23:31:30 UTC
Signed Int Max     2147483648      51886    50424    2038/01/19  03:14:08 UTC

One Second                  1       0.0000115740…             —  00:00:01
One Hour                 3600       0.0416666666…             ―  01:00:00
One Day                 86400          1        1             ―  24:00:00

*   "জান জিরো, 1900" 1899/12/31; দেখতে বাগ বিভাগটি দেখুন। ম্যাক (এবং পুরোনো) জন্য এক্সেল 2011 ব্যবহার 1904 তারিখ সিস্টেম

 

যেহেতু আমি প্রায়শই সিএসভি এবং স্থান-বিস্মৃত সামগ্রী awkপ্রক্রিয়াকরণ করতে ব্যবহার করি তাই আমি ইউনিক্সের যুগকে টাইমজোন / ডিএসটি- অনুপযুক্ত এক্সেল তারিখের ফর্ম্যাটে রূপান্তর করার একটি উপায় তৈরি করেছি :

আমি echoএই উদাহরণটির জন্য ব্যবহার করেছি , তবে আপনি এমন কোনও ফাইল পাইপ করতে পারেন যেখানে প্রথম কলামটি (.csv ফর্ম্যাটে প্রথম কক্ষের জন্য, এটি হিসাবে কল করুন awk -F,) একটি UNIX যুগের। ভুঁইয়া $1আপনার পছন্দসই কলাম / সেল সংখ্যা প্রতিনিধিত্ব বা এর পরিবর্তে একটি পরিবর্তনশীল ব্যবহার করতে।

এটিতে একটি সিস্টেম কল করে date। আপনার যদি নির্ভরযোগ্যভাবে জিএনইউ সংস্করণ থাকে তবে আপনি 2>/dev/null || date … +%%zদ্বিতীয়টি মুছে ফেলতে পারেন , $1। জিএনইউ কতটা সাধারণ, তা বিবেচনা করে আমি বিএসডির সংস্করণ ধরে নেওয়ার পরামর্শ দেব না।

getlineসময় অঞ্চল অফসেট দ্বারা outputted সার্চ date +%zমধ্যে tz, যা অনুবাদ করা হয় hours। বিন্যাস কেমন হবে -0700( পিডিটি ) অথবা +0530( আইএসটি ) তাই প্রথম সাবস্ট্রিং নিষ্কাশিত হয় 07বা 05, দ্বিতীয় 00বা 30(পরে 60 দ্বারা বিভক্ত ঘন্টার মধ্যে প্রকাশ করা), এবং তৃতীয় ব্যবহার tzদেখে পাচ্ছেন কিনা তা আমাদের অফসেট হয় নেতিবাচক এবং গন্ধে পরিবর্তন hoursপ্রয়োজন হলে.

এই পৃষ্ঠায় অন্য সমস্ত উত্তরগুলিতে প্রদত্ত সূত্রটি excelদিবালোক-সঞ্চয়-সচেতন সময় অঞ্চল সমন্বয় হিসাবে সেট করার জন্য ব্যবহৃত হয় hours/24

আপনি যদি ম্যাকেলের জন্য এক্সেলের কোনও পুরানো সংস্করণে থাকেন তবে আপনাকে তার 24107জায়গায় ব্যবহার করতে হবে 25569(উপরের ম্যাপিংটি দেখুন)।

জিএনইউ তারিখের সাথে যেকোনও স্বেচ্ছাসেবক সময়কে এক্সেল-বান্ধব সময়ে রূপান্তর করতে:

এটি মূলত একই কোড, তবে date -dআর @ইউনিক্স যুগের প্রতিনিধিত্ব করার আর আর কোনও অংশ নেই (স্ট্রিং পার্সার কতটা সক্ষম তা বিবেচনা করে আমি আসলে অবাক হয়েছি @বাধ্যতামূলক; অন্য কোন তারিখের ফর্ম্যাটটিতে 9-10 সংখ্যা রয়েছে?) এবং এটি এখন জিজ্ঞাসা করা হয়েছে জন্য দুই আউটপুট: যুগান্তকারী এবং সময় জোন অফসেট। সুতরাং আপনি @1234567890যেমন একটি ইনপুট হিসাবে ব্যবহার করতে পারেন ।

বাগ

লোটাস ১-২-৩ (মূল স্প্রেডশিট সফ্টওয়্যার) 1900 ইচ্ছাকৃতভাবে লিপ বছর হিসাবে বিবেচনা করেছিল যদিও এটি ছিল না (যদিও এটি প্রতিটি বাইট গণনা করা হয় এমন সময়ে কোডবেস হ্রাস করে)। মাইক্রোসফট এক্সেল অপরিবর্তিত রাখা সামঞ্জস্যের জন্য এই বাগ, দিন 60 (কল্পিত 1900/02/29) কুঁদন, 1900/02/28 59 দিনের লোটাস 1-2-3 এর ম্যাপিং ধারনকারী। পরিবর্তে LibreOffice 60 থেকে 1900/02/28 দিন নির্ধারণ করে এবং পূর্ববর্তী সমস্ত দিনগুলিকে পিছনে ফেলে দেয়।

1900/03/01 এর আগে যে কোনও তারিখ এক দিনের ছুটির মতো হতে পারে:

এক্সেল নেতিবাচক তারিখগুলি স্বীকার করে না এবং দিন শূন্যের জন্য জানুয়ারির জেরোথের (1899/12/31) এর একটি বিশেষ সংজ্ঞা রয়েছে। অভ্যন্তরীণভাবে, এক্সেল প্রকৃতপক্ষে নেতিবাচক তারিখগুলি পরিচালনা করে (তারা কেবলমাত্র সংখ্যা) তবে এটি তাদেরকে সংখ্যা হিসাবে প্রদর্শন করে যেহেতু এটি কীভাবে তারিখ হিসাবে প্রদর্শিত হয় তা জানে না (এটি পুরানো তারিখগুলিকে নেতিবাচক সংখ্যায় রূপান্তর করতে পারে না)। ফেব্রুয়ারী 2900, একটি দিন যা কখনই ঘটে নি, এক্সেল দ্বারা স্বীকৃত তবে লিব্রে অফিস নয়।


4

কারণ উপরের আমার সম্পাদনাগুলি প্রত্যাখ্যান করা হয়েছিল (আসলে আপনারা কেউ চেষ্টা করেছেন?), আপনার এই কাজটি করার জন্য যা প্রয়োজন তা এখানে রয়েছে:

উইন্ডোজ (এবং ম্যাক অফিস 2011+):

  • ইউনিক্স টাইমস্ট্যাম্প = (Excel Timestamp - 25569) * 86400
  • এক্সেল টাইমস্ট্যাম্প = (Unix Timestamp / 86400) + 25569

ম্যাক ওএস এক্স (প্রাক অফিস ২০১১):

  • ইউনিক্স টাইমস্ট্যাম্প = (Excel Timestamp - 24107) * 86400
  • এক্সেল টাইমস্ট্যাম্প = (Unix Timestamp / 86400) + 24107

2

আপনি ঠিক 86400 সেকেন্ডের একদিনের মধ্যেই স্পষ্টত বন্ধ হয়ে গেছেন। 2209161600 নম্বরটি ব্যবহার করুন সংখ্যাটি নয় 2209075200 আপনি যদি দুটি সংখ্যা গুগল করেন তবে আপনি উপরেরটির জন্য সমর্থন পাবেন। আমি আপনার সূত্রটি চেষ্টা করেছিলাম তবে সর্বদা আমার সার্ভারের চেয়ে 1 দিন আলাদা ছিল। ইউনিক্স টাইমস্ট্যাম্প থেকে এটি সুস্পষ্ট নয় যতক্ষণ না আপনি মানব সময়ের পরিবর্তে ইউনিক্সে ভাবেন ;-) তবে আপনি যদি ডাবল চেক করেন তবে দেখতে পাবেন এটি সঠিক হতে পারে।


এটি সঠিক, যদিও এক্সেল প্রথম বছরকে লিপ বছর হিসাবে গণনা করার পরেও তা নয়।
আনিসাস

আমি নিশ্চিত করতে পারি যে ম্যাজিক নম্বরটি আসলে 2209161600, এটি হ'ল 1970-01-01 - 1900-01-01 + 1 দিন * 86400 you একটি পাঠ্য সম্পাদক আপনি দেখতে পাবেন যে তারিখটি শূন্যের পরিবর্তে এটি হিসাবে 1 হিসাবে সংরক্ষণ করা উচিত, এজন্য আপনাকে 1 দিন যোগ করতে হবে
ক্লাউডরঞ্জার

1

আমার কাছে "মানব-পঠনযোগ্য" তারিখগুলির সাথে একটি পুরাতন এক্সেল ডাটাবেস ছিল, যেমন ২০১০.০৩.২৮ 20:12:30 থিজের তারিখগুলি ইউটিসি +১ (সিইটি) এ ছিল এবং এটিকে যুগের সময় রূপান্তর করতে হবে।

আমি অ্যালবামগুলিকে এ কলাম থেকে বি কলামের মানগুলিতে রূপান্তর করতে = (এ 4-তারিখ (1970; 1; 1)) * 86400-3600 সূত্র ব্যবহার করেছি। আপনার টাইমজোন অফসেটটি পরীক্ষা করুন এবং এটি দিয়ে একটি গণিত করুন। 1 ঘন্টা 3600 সেকেন্ড।

আমি এখানে কেবল একটি আনসার লিখি কেন, আপনি দেখতে পাচ্ছেন যে এই টপিকটি 5 বছরেরও বেশি পুরানো, আমি এই বিষয়ে নতুন এক্সেল সংস্করণ এবং লাল পোস্টগুলি ব্যবহার করি তবে সেগুলি ভুল। তারিখ (1970; 1; 1)। এখানে 1970 এবং জানুয়ারির সাথে আলাদা করা দরকার; এবং সাথে না,

আপনি যদি এই সমস্যাটিও অনুভব করেন তবে আশা করি এটি আপনাকে সহায়তা করবে। আপনার দিনটি শুভ হোক :)


0

বর্তমানের উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করেনি কারণ আমার ডেটা ইউনিক্স দিক থেকে এই ফর্ম্যাটে ছিল:

2016-02-02 19:21:42 ইউটিসি

আমার অন্যান্য যুগের টাইমস্ট্যাম্পগুলিতে রেফারেন্সিংয়ের অনুমতি দেওয়ার জন্য এপোচে রূপান্তর করতে হবে।

  1. তারিখের অংশের জন্য একটি নতুন কলাম তৈরি করুন এবং এই সূত্রটি বিশ্লেষণ করুন

    =DATEVALUE(MID(A2,6,2) & "/" & MID(A2,9,2) & "/" & MID(A2,1,4)) 
    
  2. অন্যান্য গ্রেন্ডলার ইতিমধ্যে এখানে বলেছে, অন্য কলাম তৈরি করুন

    =(B2-DATE(1970,1,1))*86400 
    
  3. মোট সেকেন্ড পেতে একসাথে যুক্ত হওয়া সময় সহ একটি অন্য কলাম তৈরি করুন:

    =(VALUE(MID(A2,12,2))*60*60+VALUE(MID(A2,15,2))*60+VALUE(MID(A2,18,2)))
    
  4. একটি সর্বশেষ কলাম তৈরি করুন যা কেবলমাত্র দুটি কলাম একসাথে যুক্ত করেছে:

    =C2+D2
    

0

এটি আমার চূড়ান্ত উত্তর এখানে।

স্পষ্টত জাভাস্ক্রিপ্ট এর new Date(year, month, day) লিপ সেকেন্ডের জন্য অ্যাকাউন্ট করে না।

// Parses an Excel Date ("serial") into a
// corresponding javascript Date in UTC+0 timezone.
//
// Doesn't account for leap seconds.
// Therefore is not 100% correct.
// But will do, I guess, since we're
// not doing rocket science here.
//
// https://www.pcworld.com/article/3063622/software/mastering-excel-date-time-serial-numbers-networkdays-datevalue-and-more.html
// "If you need to calculate dates in your spreadsheets,
//  Excel uses its own unique system, which it calls Serial Numbers".
//
lib.parseExcelDate = function (excelSerialDate) {
  // "Excel serial date" is just
  // the count of days since `01/01/1900`
  // (seems that it may be even fractional).
  //
  // The count of days elapsed
  // since `01/01/1900` (Excel epoch)
  // till `01/01/1970` (Unix epoch).
  // Accounts for leap years
  // (19 of them, yielding 19 extra days).
  const daysBeforeUnixEpoch = 70 * 365 + 19;

  // An hour, approximately, because a minute
  // may be longer than 60 seconds, see "leap seconds".
  const hour = 60 * 60 * 1000;

  // "In the 1900 system, the serial number 1 represents January 1, 1900, 12:00:00 a.m.
  //  while the number 0 represents the fictitious date January 0, 1900".
  // These extra 12 hours are a hack to make things
  // a little bit less weird when rendering parsed dates.
  // E.g. if a date `Jan 1st, 2017` gets parsed as
  // `Jan 1st, 2017, 00:00 UTC` then when displayed in the US
  // it would show up as `Dec 31st, 2016, 19:00 UTC-05` (Austin, Texas).
  // That would be weird for a website user.
  // Therefore this extra 12-hour padding is added
  // to compensate for the most weird cases like this
  // (doesn't solve all of them, but most of them).
  // And if you ask what about -12/+12 border then
  // the answer is people there are already accustomed
  // to the weird time behaviour when their neighbours
  // may have completely different date than they do.
  //
  // `Math.round()` rounds all time fractions
  // smaller than a millisecond (e.g. nanoseconds)
  // but it's unlikely that an Excel serial date
  // is gonna contain even seconds.
  //
  return new Date(Math.round((excelSerialDate - daysBeforeUnixEpoch) * 24 * hour) + 12 * hour);
};

0

জন্য আপ করা দিবালোক সংরক্ষণ সময় (অক্টোবর শেষ রবিবার পর্যন্ত মার্চ এর শেষ রবিবার থেকে শুরু করে) আমি নিম্নলিখিত সূত্র ব্যবহার করতে ছিল:

=IF(
  AND(
    A2>=EOMONTH(DATE(YEAR(A2);3;1);0)-MOD(WEEKDAY(EOMONTH(DATE(YEAR(A2);3;1);0);11);7);
    A2<=EOMONTH(DATE(YEAR(A2);10;1);0)-MOD(WEEKDAY(EOMONTH(DATE(YEAR(A2);10;1);0);11);7)
  );
  (A2-DATE(1970;1;1)-TIME(1;0;0))*24*60*60*1000;
  (A2-DATE(1970;1;1))*24*60*60*1000
)

দ্রুত ব্যাখ্যা:

যদি তারিখ ["এ 2"] মার্চের শেষ রবিবার এবং অক্টোবরের শেষ রবিবার [তৃতীয় এবং চতুর্থ কোড লাইনগুলির মধ্যে] হয় তবে আমি এক ঘন্টা [-টাইম (1; 0; 0)] বিয়োগ করব।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.