2017-01-20 15 views
0

文字列のDateTime値をオフセットで変更しようとしています。これは私が試行した手順ですが、結局は両方ともdatetime & datetime1が初期値を出力します。 00フォーマットAオフセット付き日付

:私の所望の出力は、日時

2016年1月10日17:18
2016年1月10日17:18-05を反映するように、適切なオフセットにdatetime1での書式を設定することです私のコードをステップ実行すると

string datetime = "2017-01-10T17:18:00-05:00"; 
string datetime1 = "1/10/2016 3:18:00 PM"; 

DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(datetime); 
TimeSpan tspan = dateTimeOffset.Offset; 
DateTimeOffset alteredDate = new  DateTimeOffset(Convert.ToDateTime(datetime1)).ToOffset(tspan); 

UAB = Convert.ToString(DateTimeOffset.Parse(alteredDate.ToString())); 

Console.WriteLine(datetime); 
Console.WriteLine(UAB); 
Console.ReadLine(); 

EDIT
は、私はtpsan-記号は、コードが正しく変換されないために原因となっている可能性があり-05:00の値を保持していることに気づきましたか?

+0

あなたが知っているように、日付は完全に使用可能な構造です。それらを文字列として保存する必要はありません。 'DateTime.ToString() ';いつでも好きなフォーマットで表示されます。 – Plutonix

+0

@Plutonix - 私はあなたに同意します。受け取ったファイルに日付がスティールとして受信されます。 –

答えて

-1

あなたが受け取るのDateTimeOffsetオブジェクトがすでにタイムゾーンに合わせて調整されます。私のマシン上で

string output = ""; 

// Parsing with explicit timezones 
var withZeroOffset = DateTimeOffset.Parse("2017-01-10T17:18:00-00:00"); // parsed as UTC 
var withOffset = DateTimeOffset.Parse("2017-01-10T17:18:00-05:00"); // Parsed as specific timezone 
var withoutOffset = DateTimeOffset.Parse("2017-01-10T17:18:00"); // Parsed as my timezone 
output += "All Times:\n" + withZeroOffset + "\n" + withOffset + "\n" + withoutOffset + "\n\n"; 

// Modifying timezones 
var inputUtc = DateTimeOffset.Parse("2017-01-10T17:18:00Z").ToOffset(TimeSpan.Zero); 
output += "Time UTC: " + inputUtc + "\n"; 
var minusFive = inputUtc.ToOffset(TimeSpan.FromHours(-5)); 
output += "Time @ -5:00: " + minusFive + "\n"; 
var myOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now); 
var myTime = inputUtc.ToOffset(myOffset); 
output += "Time in my timezone: (" + myOffset.TotalHours + ":00): " + myTime + "\n"; 

Console.WriteLine(output); 

、私のタイムゾーンで、私はこの出力を得る:

All Times: 
1/10/2017 5:18:00 PM +00:00 
1/10/2017 5:18:00 PM -05:00 
1/10/2017 5:18:00 PM -08:00 

Time UTC: 1/11/2017 1:18:00 AM +00:00 
Time @ -5:00: 1/10/2017 8:18:00 PM -05:00 
Time in my timezone: (-8:00): 1/10/2017 5:18:00 PM -08:00 

私はあなたの明示的なオフセットは、あなたが二度同じ答えを参照してください理由である、あなたの実際のタイムゾーンを、一致すると仮定しています。明示的にDateTimeOffsetオブジェクトのタイムゾーンを変更するには、.ToOffset()を使用します。

+0

私はOPが違うオフセットを与えたいと思っています。 – CodingYoshi

+1

'myOffset'を集めるとき、* current * offsetがあなたのタイムゾーンの正しいオフセットであると仮定しています。これは夏時間のために変更されている可能性があるため、危険な前提です。本当に、あなたは 'TimeZone'クラスを使うべきではありません。代わりに' TimeZoneInfo'を使うべきです。 'TimeZoneInfo.ConvertTime'を使うと、' ToOffset'をまったく呼び出すことができなくなります。 –

+0

ああ、最後には、すべてのオフセットが1時間であると仮定しています。それは 'UTC + 05:30'のインドのような場所では失敗する。世界には多くの ':30'と':45 'オフセットが散在しています。 –

1

は異なるコンストラクタを使用してください:ここでは

DateTimeOffset alteredDate = 
    new DateTimeOffset(Convert.ToDateTime(datetime1), tspan); 

はドキュメントです:

// 
// Summary: 
//  Initializes a new instance of the System.DateTimeOffset structure using the specified 
//  System.DateTime value and offset. 
// 
// Parameters: 
// dateTime: 
//  A date and time. 
// 
// offset: 
//  The time's offset from Coordinated Universal Time (UTC). 
// 
// Exceptions: 
// T:System.ArgumentException: 
//  dateTime.Kind equals System.DateTimeKind.Utc and offset does not equal zero.-or-dateTime.Kind 
//  equals System.DateTimeKind.Local and offset does not equal the offset of the 
//  system's local time zone.-or-offset is not specified in whole minutes. 
// 
// T:System.ArgumentOutOfRangeException: 
//  offset is less than -14 hours or greater than 14 hours.-or-System.DateTimeOffset.UtcDateTime 
//  is less than System.DateTimeOffset.MinValue or greater than System.DateTimeOffset.MaxValue. 
public DateTimeOffset(DateTime dateTime, TimeSpan offset); 
+0

これはdatetime1にオフセットを追加していないので、間違った値を表示し続けます –

+0

本当ですか?それはうまくいきます。 – CodingYoshi

+0

@RedLightGreenLight:これは本当に尋ねられたものに対する正解です。 'DateTime'と' TimeSpan'を渡すと、指定された通りに 'DateTimeOffset'が作成されます。しかし、 'DateTime'だけを渡すと、あなたが渡した' DateTime'の 'Kind'プロパティに基づいて、あなたが望むオフセットについていくつかの仮定を行います。そして、' ToOffset'は、オフセットとローカルタイムを切り替えますマッチする - あなたが望みませんでした。だから本当にこの答えに従えば、あなたが求めたものを持っているはずです。 –

関連する問題