转换为 UTC 时间
Convert To UTC Time
我正在尝试将我的数据转换为 DateTime
和 AssumeUniversal
,但出现
错误
String was not recognized as a valid DateTime
这是传入的格式
1/10/2017 1:13:00 PM
这是我的跟踪事件class
public partial class TrackEvent {
private System.DateTime timestampField;
private bool timestampFieldSpecified;
private string eventTypeField;
private string eventDescriptionField;
private string statusExceptionCodeField;
private string statusExceptionDescriptionField;
private Address addressField;
private string stationIdField;
private ArrivalLocationType arrivalLocationField;
private bool arrivalLocationFieldSpecified;
/// <remarks/>
public System.DateTime Timestamp {
get {
return this.timestampField;
}
set {
this.timestampField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool TimestampSpecified {
get {
return this.timestampFieldSpecified;
}
set {
this.timestampFieldSpecified = value;
}
}
/// <remarks/>
public string EventType {
get {
return this.eventTypeField;
}
set {
this.eventTypeField = value;
}
}
/// <remarks/>
public string EventDescription {
get {
return this.eventDescriptionField;
}
set {
this.eventDescriptionField = value;
}
}
/// <remarks/>
public string StatusExceptionCode {
get {
return this.statusExceptionCodeField;
}
set {
this.statusExceptionCodeField = value;
}
}
/// <remarks/>
public string StatusExceptionDescription {
get {
return this.statusExceptionDescriptionField;
}
set {
this.statusExceptionDescriptionField = value;
}
}
/// <remarks/>
public Address Address {
get {
return this.addressField;
}
set {
this.addressField = value;
}
}
/// <remarks/>
public string StationId {
get {
return this.stationIdField;
}
set {
this.stationIdField = value;
}
}
/// <remarks/>
public ArrivalLocationType ArrivalLocation {
get {
return this.arrivalLocationField;
}
set {
this.arrivalLocationField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool ArrivalLocationSpecified {
get {
return this.arrivalLocationFieldSpecified;
}
set {
this.arrivalLocationFieldSpecified = value;
}
}
}
这就是我尝试调用转换的方式:
TrackEvent currMax = new TrackEvent();
currMax.Timestamp = DateTime.MinValue;
foreach (TrackEvent trackevent in trackDetail.Events)
{
if (trackevent.TimestampSpecified && trackevent.Timestamp > currMax.Timestamp)
{
currMax = trackevent;
var formats = new[]
{
"MM/dd/yyyy hh:mm tt",
"MM/dd/yyyy hh:mmtt",
"MM/dd/yyyy h:mm tt",
"MM/dd/yyyy h:mmtt",
"MM/dd/yyyy hhtt",
"MM/dd/yyyy htt",
"MM/dd/yyyy h tt",
"MM/dd/yyyy hh tt",
"MM/dd/yyyy HH:mm:ss.fff",
"MM/dd/yyyy h:mm:ss tt"
};
DateTime time = DateTime.ParseExact(currMax.Timestamp.ToString(), formats, System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AssumeUniversal | System.Globalization.DateTimeStyles.AdjustToUniversal);
Console.WriteLine(time);
}
}
您使用 DateTime.ParseExact
,它将查看您所有给定的格式,将 string
解析为 DateTime
。
但是输入datetime
格式
1/10/2017 1:13:00 PM
的月份只有 一个 数字(即 M/dd
...),而你所有 formats
解析输入 datetime
with DateTime.ParseExact
仅支持 两个 数字 day/month (即:MM/dd
...):
var formats = new[]
{
"MM/dd/yyyy hh:mm tt",
"MM/dd/yyyy hh:mmtt",
"MM/dd/yyyy h:mm tt",
"MM/dd/yyyy h:mmtt",
"MM/dd/yyyy hhtt",
"MM/dd/yyyy htt",
"MM/dd/yyyy h tt",
"MM/dd/yyyy hh tt",
"MM/dd/yyyy HH:mm:ss.fff",
"MM/dd/yyyy h:mm:ss tt"
};
请注意,您在所有格式中都使用 MM/dd ...
要更正它,您还应该在 formats
中包含允许单个数字作为 day/month 表示的格式:
var formats = new[]
{
"M/d/yyyy hh:mm tt",
"M/d/yyyy hh:mmtt",
"M/d/yyyy h:mm tt",
"M/d/yyyy h:mmtt",
"M/d/yyyy hhtt",
"M/d/yyyy htt",
"M/d/yyyy h tt",
"M/d/yyyy hh tt",
"M/d/yyyy HH:mm:ss.fff",
"M/d/yyyy h:mm:ss tt"
};
以上格式将同时支持个位数和双位数日期和月份
我正在尝试将我的数据转换为 DateTime
和 AssumeUniversal
,但出现
String was not recognized as a valid DateTime
这是传入的格式
1/10/2017 1:13:00 PM
这是我的跟踪事件class
public partial class TrackEvent {
private System.DateTime timestampField;
private bool timestampFieldSpecified;
private string eventTypeField;
private string eventDescriptionField;
private string statusExceptionCodeField;
private string statusExceptionDescriptionField;
private Address addressField;
private string stationIdField;
private ArrivalLocationType arrivalLocationField;
private bool arrivalLocationFieldSpecified;
/// <remarks/>
public System.DateTime Timestamp {
get {
return this.timestampField;
}
set {
this.timestampField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool TimestampSpecified {
get {
return this.timestampFieldSpecified;
}
set {
this.timestampFieldSpecified = value;
}
}
/// <remarks/>
public string EventType {
get {
return this.eventTypeField;
}
set {
this.eventTypeField = value;
}
}
/// <remarks/>
public string EventDescription {
get {
return this.eventDescriptionField;
}
set {
this.eventDescriptionField = value;
}
}
/// <remarks/>
public string StatusExceptionCode {
get {
return this.statusExceptionCodeField;
}
set {
this.statusExceptionCodeField = value;
}
}
/// <remarks/>
public string StatusExceptionDescription {
get {
return this.statusExceptionDescriptionField;
}
set {
this.statusExceptionDescriptionField = value;
}
}
/// <remarks/>
public Address Address {
get {
return this.addressField;
}
set {
this.addressField = value;
}
}
/// <remarks/>
public string StationId {
get {
return this.stationIdField;
}
set {
this.stationIdField = value;
}
}
/// <remarks/>
public ArrivalLocationType ArrivalLocation {
get {
return this.arrivalLocationField;
}
set {
this.arrivalLocationField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool ArrivalLocationSpecified {
get {
return this.arrivalLocationFieldSpecified;
}
set {
this.arrivalLocationFieldSpecified = value;
}
}
}
这就是我尝试调用转换的方式:
TrackEvent currMax = new TrackEvent();
currMax.Timestamp = DateTime.MinValue;
foreach (TrackEvent trackevent in trackDetail.Events)
{
if (trackevent.TimestampSpecified && trackevent.Timestamp > currMax.Timestamp)
{
currMax = trackevent;
var formats = new[]
{
"MM/dd/yyyy hh:mm tt",
"MM/dd/yyyy hh:mmtt",
"MM/dd/yyyy h:mm tt",
"MM/dd/yyyy h:mmtt",
"MM/dd/yyyy hhtt",
"MM/dd/yyyy htt",
"MM/dd/yyyy h tt",
"MM/dd/yyyy hh tt",
"MM/dd/yyyy HH:mm:ss.fff",
"MM/dd/yyyy h:mm:ss tt"
};
DateTime time = DateTime.ParseExact(currMax.Timestamp.ToString(), formats, System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AssumeUniversal | System.Globalization.DateTimeStyles.AdjustToUniversal);
Console.WriteLine(time);
}
}
您使用 DateTime.ParseExact
,它将查看您所有给定的格式,将 string
解析为 DateTime
。
但是输入datetime
格式
1/10/2017 1:13:00 PM
的月份只有 一个 数字(即 M/dd
...),而你所有 formats
解析输入 datetime
with DateTime.ParseExact
仅支持 两个 数字 day/month (即:MM/dd
...):
var formats = new[]
{
"MM/dd/yyyy hh:mm tt",
"MM/dd/yyyy hh:mmtt",
"MM/dd/yyyy h:mm tt",
"MM/dd/yyyy h:mmtt",
"MM/dd/yyyy hhtt",
"MM/dd/yyyy htt",
"MM/dd/yyyy h tt",
"MM/dd/yyyy hh tt",
"MM/dd/yyyy HH:mm:ss.fff",
"MM/dd/yyyy h:mm:ss tt"
};
请注意,您在所有格式中都使用 MM/dd ...
要更正它,您还应该在 formats
中包含允许单个数字作为 day/month 表示的格式:
var formats = new[]
{
"M/d/yyyy hh:mm tt",
"M/d/yyyy hh:mmtt",
"M/d/yyyy h:mm tt",
"M/d/yyyy h:mmtt",
"M/d/yyyy hhtt",
"M/d/yyyy htt",
"M/d/yyyy h tt",
"M/d/yyyy hh tt",
"M/d/yyyy HH:mm:ss.fff",
"M/d/yyyy h:mm:ss tt"
};
以上格式将同时支持个位数和双位数日期和月份