2012-05-17 37 views
5

* (Điều này là dành cho cơ sở dữ liệu ISV vì vậy tôi đang loại kỹ thuật đảo ngược này và không thể thay đổi) ...CLARION ngày chuyển đổi C# + NGÀY ADD/SUBTRACT

Làm thế nào tôi có thể làm ngày sau để int (visa/lại) chuyển đổi trong C# ...

Vì vậy nói ngày là:

5/17/2012 

nó được chuyển đổi sang int

77207 

trong cơ sở dữ liệu.

Lúc đầu, tôi nghĩ đây là một ngày Julian tuy nhiên nó không xuất hiện như vậy. Tôi đã lừa xung quanh với phương pháp từ Julian Date Question tuy nhiên điều này không khớp.

var date = ConvertToJulian(Convert.ToDateTime("5/17/2012")); 
    Console.WriteLine(date); 

    public static long ConvertToJulian(DateTime Date) 
    { 
     int Month = Date.Month; 
     int Day = Date.Day; 
     int Year = Date.Year; 

     if (Month < 3) 
     { 
      Month = Month + 12; 
      Year = Year - 1; 
     } 
     long JulianDay = Day + (153 * Month - 457) 
     /5 + 365 * Year + (Year/4) - 
     (Year/100) + (Year/400) + 1721119; 
     return JulianDay; 
    } 

Outputs 2456055 //Should be 77207 

Tôi đã sử dụng SQL này để thực hiện chuyển đổi:

SELECT Convert(date, CONVERT(CHAR,DATEADD(D, 77207, '1800-12-28'),101)) 

và nó dường như là chính xác. Làm thế nào tôi có thể thực hiện chuyển đổi này trong C#? Và ai đó có thể làm sáng tỏ tôi như những gì tiêu chuẩn này được dựa trên hoặc là nó chỉ đơn giản là một chuyển đổi ngẫu nhiên. Cảm ơn trước.

+0

Bạn đã cố gắng để xem nếu 2012/05/18 tạo 77.208 hoặc nếu 2012/05/16 tạo ra 77206? – Josh

+0

@Josh Vâng đó là cách tôi đã tìm ra rằng bit của sql ... 5/18 = 77208 vv ... –

+0

Đổi tên cho những người trong tương lai đang gặp sự cố này –

Trả lời

5

này dường như là một Clarion Date:

số ngày đã trôi qua kể từ ngày 28 tháng 12 năm 1800

Bị cáo buộc đến, Display Clarion Dates In Excel nó chỉ mất

trừ 36.161 từ giá trị và định dạng nó như một ngày

+0

Cuộc gọi tốt Josh, Liên kết tuyệt vời cũng –

0

Nếu nó là một công thức tuyến tính, bạn sẽ có thể tính toán công thức dưới dạng y = mx + b. Bạn sẽ cần tối thiểu hai điểm dữ liệu.

4
//TO int 
var date = new DateTime(1800,12,28,0,0,0);    
var daysSince = (DateTime.Now-date).Days; 

//FROM int 
var date = new DateTime(1800, 12, 28, 0, 0, 0); 
var theDate = date.AddDays(77207); 
+1

Tôi thích của bạn tốt hơn - đã xóa của tôi – RThomas

0

Đây là Bộ luật vb.net tôi sử dụng để chuyển đổi Clarion ngày để Julian ngày:

Dim ldblDaysToSubtract As Double = 36161.0 

mclsRevEmployeeRecd.BirthDate(istrBirthDate:=(CDbl(E1Row.Item("BIRTH_DT")) - ldblDaysToSubtract).ToString) 

mstrBirthDate = Format(CDate(Date.FromOADate(CDbl(istrBirthDate)).ToString), "MM/dd/yyyy") 
Các vấn đề liên quan