[ 
https://issues.apache.org/jira/browse/LUCENENET-409?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13021065#comment-13021065
 ] 

Neal Granroth commented on LUCENENET-409:
-----------------------------------------

Yes, that works.
However, when I ran some tests I found that the patch for StringToTime() 
doesn't work right.
It needs to be this:
 public static long StringToTime(System.String s)
 {
    return SupportClass.Number.Parse(s, SupportClass.Number.MAX_RADIX);
 }

I don't quite understand why, as the SupportClass.Number.ToInt64() method is 
very similar; but when it is used the returned time is always 1970.

Original Time: 4/18/2011 10:13:33 AM
Returned Time: 1/21/1970 4:08:42 AM
Diff Secs: -1301378690.68857
String: "0gmnjogq8"

If I use SupportClass.Number.Parse() instead I see this:

Original Time: 4/18/2011 10:16:09 AM
Returned Time: 4/18/2011 10:16:09 AM
Diff Secs: -7.03E-05
String: "0gmnjrt5d"

Here's the small test program in case you'd like to put it into a unit-test:
 using System;
 using System.Collections.Generic;
 using System.Text;
 using DateField = Lucene.Net.Documents.DateField;
 using SC = System.Console;

 namespace DateCheck
 {
        class Program
        {
                static void Main(string[] args)
                {
                        DateTime dtTest1 = DateTime.Now.ToLocalTime();
                        string strTest = DateField.DateToString(dtTest1);
                        DateTime dtTest2 = DateField.StringToDate( strTest );

                        SC.WriteLine("Original Time: {0}",dtTest1.ToString());
                        SC.WriteLine("Returned Time: {0}",dtTest2.ToString());
                        SC.WriteLine("Diff Secs: 
{0}",(dtTest2-dtTest1).TotalSeconds);
                        SC.WriteLine("String: \"{0}\"",strTest);
                }
        }
 }




> Invalid Base exception in DateField.StringToTime()
> --------------------------------------------------
>
>                 Key: LUCENENET-409
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-409
>             Project: Lucene.Net
>          Issue Type: Bug
>          Components: Lucene.Net Core
>    Affects Versions: Lucene.Net 2.9.4
>            Reporter: Neal Granroth
>         Attachments: DateField.patch
>
>
> The Lucene.Net.Documents.DateField.StringToTime() method called by 
> StringToDate() appears to specify an invalid value for the base in the .NET 
> Convert.ToInt64() call.  When a DateField value in a legacy index is read, or 
> Lucene.NET 2.9.4 is used with legacy code that relies upon DateField, the 
> following exception occurs whenever StringToDate() is called:
> System.ArgumentException: Invalid Base.
>    at System.Convert.ToInt64(String value, Int32 fromBase)
>    at Lucene.Net.Documents.DateField.StringToTime(String s)
>    at Lucene.Net.Documents.DateField.StringToDate(String s)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to