簡體   English   中英

如何在不使用Datetime C#的實例/幫助器的情況下,從刻度獲取日期(yyyy / mm / dd)

[英]How to get Date (yyyy/mm/dd) from ticks without using an instance/helper of/from Datetime C#

我正在嘗試從刻度中提取日期。

我說的對,毫秒是10000滴答。 一天是864000000000滴答聲,一個月是26784000000000滴答滴答,一年是316224000000000。

但是當我在計算中使用它們時,我得到了錯誤的日期:(。

使用Datetime解析本來可以很容易,但是由於某些原因,他們說我不應該依賴它,因為它比較慢。

感謝您的幫助。 謝謝。

更新:

//assume this for now 
    DateTime time = DateTime.Now;
char[] ashigakaricom= new char[] { 'yyyy','-','mm','-','dd','-','H','H',':','M','M',':','S','S',':','m','m','m' }; 
long ticks = time.Ticks;
 int n1 = (int)(ticks >> 32);
 int n2 = (int)ticks;
 if (n2 < 0) 
n1++; 

ticks = (((Math.BigMul(429497, n2) - (int)(Math.BigMul(1161359156, n2) >> 32) - Math.BigMul(1161359156, n1)) >> 32)) + Math.BigMul(n1, 429497); n1 = (int)(ticks >> 32); 
n2 = (int)ticks; 


if (n2 < 0) 
n1++; 

int q = n1 * 50 + ((50 * (n2 >> 16)) >> 16) - (int)(System.Math.BigMul(1244382467, n1) >> 32) - 1; 

int r = (int)(ticks - System.Math.BigMul(q, 86400000)); 

if (r > 86400000) 
r -= 86400000; 



//so on

一個月是26784000000

啊-對不起,你住在哪個星球上? 在礦山(稱為“地球”)上的月份為28到31天,因此無法將其標准化為特定的滴答數。

您能想到的最好的是IIRC

工作日歷無法實現您要達到的目標,這意味着大量的維護和管理費用。每月平均需要5個小時。 只需使用.NET提供的功能-要進行零增益復制就需要大量工作。

嘗試這個:

     TimeSpan elapsedSpan = new TimeSpan(10000);
 or: TimeSpan elapsedSpan = TimeSpan.FromTicks(10000);
 then use: elapsedSpan.Milliseconds, elapsedSpan.Days

參考: http : //msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

P / S:316224000000000滴答等於366天。

毫秒可以是任意數量的滴答聲(取決於您使用的滴答聲)。 無論如何,即使您有一個紀元以來的天數(假設為1970年1月1日),您仍然很難計算每個月(例如2月)的天數。

我對此有幾個想法:

  • 如果您錯過正確的年份-可能會假設此滴答計算的起點不正確。 對於C#,它不是Unix時代的開始(1970年1月1日),而是“開始的日子”(0001年1月1日);
  • 錯誤的日期,小時或分鍾-這可能與leap年有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM