Question: Is it possible to get TimeZone and working hours of the users through EWS?

I am able to extract TZ and Working Hours for current user(Account with which the ExchangeService is initialized)

```
UserConfiguration usrConfig = UserConfiguration.Bind(service, "WorkHours", WellKnownFolderName.Calendar, UserConfigurationProperties.All);

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(new MemoryStream(usrConfig.XmlData));
XmlNodeList nlList = xmlDoc.GetElementsByTagName("WorkHoursVersion1");
Console.WriteLine(nlList.Item(0).InnerXml);
string str = nlList.Item(0).InnerXml;

```

But I am not able to extract the same information for other users.

Answer: 
I use the [GetUserAvailability](http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.exchangeservice.getuseravailability%28v=exchg.80%29.aspx) operation.

Input is an array of users. Output includes an [array of AttendeeAvailability](http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.getuseravailabilityresults.attendeesavailability%28v=exchg.80%29.aspx), which contains a [WorkingHours](http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.workinghours%28v=exchg.80%29.aspx) property, which itself includes TimeZone:

```
GetUserAvailabilityResults uars = service.GetUserAvailability(
    new AttendeeInfo[] { new AttendeeInfo(smtpAddressOfUser, MeetingAttendeeType.Required, true), ... }, 
    new TimeWindow(DateTime.Now, DateTime.Now.AddDays(1)), 
    AvailabilityData.FreeBusy
    );

```
Have a look at [Exchange Impersonation](http://msdn.microsoft.com/en-us/library/dd877053%28v=exchg.140%29.aspx).

You can have a specific user account impersonate another user account and access their details without the need for their username and password.

```cs
string impName = @"impy";
string impPassword = @"password";
string impDomain = @"domain";
string impEmail = @"impy@domain.com";

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new NetworkCredential(impName, impPassword, impDomain);
service.AutodiscoverUrl(impEmail);

service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, @"user@domain.com");

```

You should then be able to use `UserConfiguration.Bind()` to do what you are after.

More references:
[http://msdn.microsoft.com/en-us/library/dd633680(v=exchg.80).aspx](http://msdn.microsoft.com/en-us/library/dd633680%28v=exchg.80%29.aspx)