2015-01-15 15 views
6

MSDN says:di analisi TimeSpan con meno optional segno

I stili parametro influenza l'interpretazione delle stringhe analizzati usando stringhe di formato personalizzato. Determina se l'input viene interpretato come intervallo di tempo negativo solo se è presente un segno negativo (TimeSpanStyles.None) o se è sempre interpretato come intervallo di tempo negativo (TimeSpanStyles.AssumeNegative). Se TimeSpanStyles.AssumeNegative non viene utilizzato, il formato deve includere un simbolo di segno negativo letterale (come "-") per analizzare correttamente un intervallo di tempo negativo.

devo provare la seguente:

TimeSpan.ParseExact("-0700", @"\-hhmm", null, TimeSpanStyles.None) 

Tuttavia restituisce 07:00:00. E fallisce per "0700".

se provo:

TimeSpan.ParseExact("-0700", "hhmm", null, TimeSpanStyles.None) 

Non riesce anche.

Non fallisce sia per "0700" e "-0700", ma restituisce sempre il positivo 07:00:00.

Come deve essere usato?

+1

Come una soluzione, se non è possibile ottenere questo al lavoro , potresti analizzare una 'Duration' in [Noda Time] (http://nodatime.org). Vedrò cosa posso fare con 'TimeSpan' però ... –

+0

Grazie per il suggerimento. Ma è un semplice script che non desidero e una libreria aggiuntiva, preferirei usare invece StartsWith ('-'). –

+0

Abbastanza giusto. L'ho incluso nella mia risposta in ogni caso, ma soprattutto per il bene degli altri lettori. –

risposta

3

E sguardi come questo non è supportato. Dalla pagina custom TimeSpan format strings:

personalizzato TimeSpan identificatori di formato anche non includono un segno distintivo che consente di distinguere tra gli intervalli di tempo negative e positive. Per includere un simbolo di segno, devi costruire una stringa di formato usando la logica condizionale. La sezione Altri caratteri include un esempio.

Questo sembra davvero strano. Ick.

Come menzionato nel mio commento, è possibile utilizzare il miodel progetto Duration parsing per questo; eccessivo per questo caso, ma se avessi altre date/orari di lavoro nel progetto, potrebbe essere utile.

Ad esempio:

var pattern = DurationPattern.CreateWithInvariantCulture("-hhmm"); 
var timeSpan = pattern.Parse("-0700").Value.ToTimeSpan(); 
+0

Quindi, il parametro 'styles' è inutile. Si potrebbe semplicemente aggiungere il segno '-' davanti? –

+0

@TN .: Abbastanza inutile, sì. L'intera funzionalità sembra un po 'sottodimensionata, ad essere onesti ... (Voglio dire, lo stile ha un effetto, ma non molto utile - almeno per modelli personalizzati. Forse è meglio per i modelli standard ...) –

+0

E l'esempio sopra funzionerà con '7000'? –

0

Sembra proprio che si fastidiosamente necessario verificare voi stessi se si inizia con un leader -

// tsPos = 07:00:00 
string pos = "0700"; 
TimeSpan tsPos = TimeSpan.ParseExact(pos, new string [] { "hhmm", @"\-hhmm" }, null, 
    pos[0] == '-' ? TimeSpanStyles.AssumeNegative : TimeSpanStyles.None); 

// tsNeg = -07:00:00    
string neg = "-0700"; 
TimeSpan tsNeg = TimeSpan.ParseExact(neg, new string [] { "hhmm", @"\-hhmm" }, null, 
    neg[0] == '-' ? TimeSpanStyles.AssumeNegative : TimeSpanStyles.None); 
Problemi correlati